```json
{
  "sym_variables": [
    ("x0", "wooden pencils"),
    ("x1", "postage stamps"),
    ("x2", "red highlighters"),
    ("x3", "scissors"),
    ("x4", "headsets"),
    ("x5", "usb flash drives")
  ],
  "objective_function": "7.25 * x0 + 1.62 * x1 + 9.82 * x2 + 2.87 * x3 + 7.61 * x4 + 4.6 * x5",
  "constraints": [
    "4 * x0 + 17 * x1 + 9 * x2 + 12 * x3 + 17 * x4 + 17 * x5 <= 248",
    "12 * x3 + 17 * x5 >= 32",
    "4 * x0 + 9 * x2 >= 16",
    "12 * x3 + 17 * x4 >= 23",
    "4 * x0 + 17 * x4 >= 27",
    "4 * x0 + 12 * x3 >= 37",
    "4 * x0 + 17 * x1 >= 26",
    "17 * x1 + 17 * x4 >= 15",
    "17 * x1 + 12 * x3 >= 40",
    "17 * x1 + 9 * x2 >= 40",
    "17 * x1 + 17 * x5 >= 37",
    "4 * x0 + 17 * x1 + 12 * x3 >= 26",
    "17 * x1 + 17 * x4 + 17 * x5 >= 26",
    "4 * x0 + 17 * x1 + 17 * x5 >= 26",
    "4 * x0 + 17 * x1 + 12 * x3 >= 35",
    "17 * x1 + 17 * x4 + 17 * x5 >= 35",
    "4 * x0 + 17 * x1 + 17 * x5 >= 35",
    "4 * x0 + 17 * x1 + 12 * x3 >= 30",
    "17 * x1 + 17 * x4 + 17 * x5 >= 30",
    "4 * x0 + 17 * x1 + 17 * x5 >= 30",
    "1 * x1 + -8 * x3 + 7 * x4 >= 0",
    "4 * x0 + 17 * x1 <= 134",
    "4 * x0 + 17 * x5 <= 191",
    "17 * x1 + 17 * x4 <= 43",
    "17 * x4 + 17 * x5 <= 100",
    "12 * x3 + 17 * x4 <= 216",
    "17 * x1 + 9 * x2 <= 133",
    "17 * x1 + 9 * x2 + 17 * x4 <= 83",
    "4 * x0 + 9 * x2 + 12 * x3 <= 222",
    "4 * x0 + 17 * x1 + 12 * x3 <= 173",
    "4 * x0 + 17 * x1 + 17 * x5 <= 108",
    "9 * x2 + 17 * x4 + 17 * x5 <= 193",
    "17 * x1 + 9 * x2 + 12 * x3 <= 221",
    "4 * x0 + 17 * x4 + 17 * x5 <= 165",
    "4 * x0 + 9 * x2 + 17 * x4 <= 215",
    "4 * x0 + 12 * x3 + 17 * x5 <= 105",
    "9 * x2 + 12 * x3 + 17 * x4 <= 145",
    "4 * x0 + 12 * x3 + 17 * x4 <= 225",
    "4 * x0 + 17 * x1 + 9 * x2 <= 176",
    "17 * x1 + 17 * x4 + 17 * x5 <= 104",
    "17 * x1 + 12 * x3 + 17 * x4 <= 79",
    "4 * x0 + 17 * x1 + 9 * x2 + 12 * x3 + 17 * x4 + 17 * x5 <= 79"
  ]
}
```

```python
import gurobipy as gp

# Create a new model
m = gp.Model("optimization_problem")

# Create variables
x = m.addVars(6, lb=0, vtype=gp.GRB.INTEGER, names=[
    "wooden pencils", "postage stamps", "red highlighters", "scissors", "headsets", "usb flash drives"
])

# Set objective function
m.setObjective(
    7.25 * x[0] + 1.62 * x[1] + 9.82 * x[2] + 2.87 * x[3] + 7.61 * x[4] + 4.6 * x[5],
    gp.GRB.MAXIMIZE
)

# Add constraints
weights = [4, 17, 9, 12, 17, 17]
m.addConstr(sum(weights[i] * x[i] for i in range(6)) <= 248)
m.addConstr(12 * x[3] + 17 * x[5] >= 32)
m.addConstr(4 * x[0] + 9 * x[2] >= 16)
m.addConstr(12 * x[3] + 17 * x[4] >= 23)
m.addConstr(4 * x[0] + 17 * x[4] >= 27)
m.addConstr(4 * x[0] + 12 * x[3] >= 37)
m.addConstr(4 * x[0] + 17 * x[1] >= 26)
m.addConstr(17 * x[1] + 17 * x[4] >= 15)
m.addConstr(17 * x[1] + 12 * x[3] >= 40)
m.addConstr(17 * x[1] + 9 * x[2] >= 40)
m.addConstr(17 * x[1] + 17 * x[5] >= 37)
m.addConstr(4 * x[0] + 17 * x[1] + 12 * x[3] >= 26)
m.addConstr(17 * x[1] + 17 * x[4] + 17 * x[5] >= 26)
m.addConstr(4 * x[0] + 17 * x[1] + 17 * x[5] >= 26)
m.addConstr(4 * x[0] + 17 * x[1] + 12 * x[3] >= 35)
m.addConstr(17 * x[1] + 17 * x[4] + 17 * x[5] >= 35)
m.addConstr(4 * x[0] + 17 * x[1] + 17 * x[5] >= 35)
m.addConstr(4 * x[0] + 17 * x[1] + 12 * x[3] >= 30)
m.addConstr(17 * x[1] + 17 * x[4] + 17 * x[5] >= 30)
m.addConstr(4 * x[0] + 17 * x[1] + 17 * x[5] >= 30)
m.addConstr(x[1] - 8 * x[3] + 7 * x[4] >= 0)
m.addConstr(4 * x[0] + 17 * x[1] <= 134)
m.addConstr(4 * x[0] + 17 * x[5] <= 191)
m.addConstr(17 * x[1] + 17 * x[4] <= 43)
m.addConstr(17 * x[4] + 17 * x[5] <= 100)
m.addConstr(12 * x[3] + 17 * x[4] <= 216)
m.addConstr(17 * x[1] + 9 * x[2] <= 133)
m.addConstr(17 * x[1] + 9 * x[2] + 17 * x[4] <= 83)
m.addConstr(4 * x[0] + 9 * x[2] + 12 * x[3] <= 222)
m.addConstr(4 * x[0] + 17 * x[1] + 12 * x[3] <= 173)
m.addConstr(4 * x[0] + 17 * x[1] + 17 * x[5] <= 108)
m.addConstr(9 * x[2] + 17 * x[4] + 17 * x[5] <= 193)
m.addConstr(17 * x[1] + 9 * x[2] + 12 * x[3] <= 221)
m.addConstr(4 * x[0] + 17 * x[4] + 17 * x[5] <= 165)
m.addConstr(4 * x[0] + 9 * x[2] + 17 * x[4] <= 215)
m.addConstr(4 * x[0] + 12 * x[3] + 17 * x[5] <= 105)
m.addConstr(9 * x[2] + 12 * x[3] + 17 * x[4] <= 145)
m.addConstr(4 * x[0] + 12 * x[3] + 17 * x[4] <= 225)
m.addConstr(4 * x[0] + 17 * x[1] + 9 * x[2] <= 176)
m.addConstr(17 * x[1] + 17 * x[4] + 17 * x[5] <= 104)
m.addConstr(17 * x[1] + 12 * x[3] + 17 * x[4] <= 79)
m.addConstr(4 * x[0] + 17 * x[1] + 9 * x[2] + 12 * x[3] + 17 * x[4] + 17 * x[5] <= 79)


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    for v in m.getVars():
        print(f"{v.varName}: {v.x}")
    print(f"Obj: {m.objVal}")
elif m.status == gp.GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print(f"Optimization ended with status {m.status}")

```
