## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize profit by determining the optimal number of small and large plush toys to produce, given constraints on cotton and worker time.

Let's define the decision variables:

* `small_plush`: number of small plush toys to produce
* `large_plush`: number of large plush toys to produce

The objective function is to maximize profit:

* Profit per small plush: $3
* Profit per large plush: $5

The constraints are:

* Cotton: 5 units per small plush, 8 units per large plush, and 250 units available
* Worker time: 10 minutes per small plush, 12 minutes per large plush, and 500 minutes available

## Mathematical Formulation

The mathematical formulation of the problem is:

Maximize: 3 `small_plush` + 5 `large_plush`

Subject to:

* 5 `small_plush` + 8 `large_plush` <= 250 (cotton constraint)
* 10 `small_plush` + 12 `large_plush` <= 500 (worker time constraint)
* `small_plush` >= 0, `large_plush` >= 0 (non-negativity constraints)

## Gurobi Code

```python
import gurobi

# Create a new Gurobi model
model = gurobi.Model()

# Define the decision variables
small_plush = model.addVar(lb=0, name="small_plush", vtype=gurobi.GRB.CONTINUOUS)
large_plush = model.addVar(lb=0, name="large_plush", vtype=gurobi.GRB.CONTINUOUS)

# Define the objective function
model.setObjective(3 * small_plush + 5 * large_plush, gurobi.GRB.MAXIMIZE)

# Define the constraints
model.addConstr(5 * small_plush + 8 * large_plush <= 250, name="cotton_constraint")
model.addConstr(10 * small_plush + 12 * large_plush <= 500, name="worker_time_constraint")

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Small plush: {small_plush.x:.2f}")
    print(f"Large plush: {large_plush.x:.2f}")
    print(f"Max profit: {model.objVal:.2f}")
else:
    print("No optimal solution found.")
```