## Problem Description and Formulation

The paper company produces two types of paper: lined paper and graph paper. Each type of paper requires a certain amount of time on two machines: a cutting machine and a line-printing machine. The goal is to determine the optimal number of reams of each type of paper to produce in order to maximize profit.

Let's define the decision variables:

* \(x\): number of reams of lined paper to produce
* \(y\): number of reams of graph paper to produce

The constraints are:

* Cutting machine time: \(2x + 2y \leq 3500\)
* Line-printing machine time: \(6x + 10y \leq 3500\)
* Non-negativity: \(x \geq 0, y \geq 0\)

The objective function to maximize is:

* Profit: \(11x + 13y\)

## Gurobi Code

```python
import gurobi

def solve_paper_company_problem():
    # Create a new model
    model = gurobi.Model()

    # Define the decision variables
    x = model.addVar(lb=0, name="Lined Paper")
    y = model.addVar(lb=0, name="Graph Paper")

    # Define the objective function
    model.setObjective(11*x + 13*y, gurobi.GRB.MAXIMIZE)

    # Define the constraints
    model.addConstr(2*x + 2*y <= 3500, name="Cutting Machine")
    model.addConstr(6*x + 10*y <= 3500, name="Line-Printing Machine")

    # Optimize the model
    model.optimize()

    # Print the results
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: Lined Paper = {x.varValue}, Graph Paper = {y.varValue}")
        print(f"Maximum profit: ${model.objVal:.2f}")
    else:
        print("No optimal solution found")

# Run the function
solve_paper_company_problem()
```