```json
{
  "sym_variables": [
    ("x0", "candles"),
    ("x1", "packs of paper plates"),
    ("x2", "paper towel rolls"),
    ("x3", "cartons of milk"),
    ("x4", "toilet paper rolls"),
    ("x5", "packs of napkins")
  ],
  "objective_function": "4*x0*x1 + 3*x0*x5 + 6*x1**2 + x1*x4 + 2*x1*x5 + 9*x2**2 + 9*x2*x5 + 2*x3*x4 + 5*x3*x5 + 9*x4**2 + 9*x2 + 5*x4 + 9*x5",
  "constraints": [
    "2*x0 + 12*x1 + 2*x2 + 2*x3 + 5*x4 + 9*x5 <= 305",
    "8*x0 + 5*x1 + 12*x2 + 7*x3 + 7*x4 + 4*x5 <= 201",
    "12*x1 + 2*x3 >= 41",
    "2*x3 + 5*x4 >= 37",
    "12**2*x1**2 + 2**2*x2**2 + 2**2*x3**2 >= 31", 
    "5*x1 + 4*x5 >= 13",
    "8**2*x0**2 + 12**2*x2**2 >= 27",
    "8**2*x0**2 + 7**2*x3**2 >= 11",
    "12*x2 + 7*x3 + 4*x5 >= 33",
    "8*x0 + 5*x1 + 12*x2 >= 33",
    "8*x0 + 12*x2 + 7*x4 >= 33",
    "12*x2 + 7*x3 + 4*x5 >= 18",
    "8**2*x0**2 + 5**2*x1**2 + 12**2*x2**2 >= 18",
    "8*x0 + 12*x2 + 7*x4 >= 18",
    "12**2*x2**2 + 7**2*x3**2 + 4**2*x5**2 >= 27",
    "8**2*x0**2 + 5**2*x1**2 + 12**2*x2**2 >= 27",
    "8*x0 + 12*x2 + 7*x4 >= 27",
    "2**2*x3**2 + 9**2*x5**2 <= 104",
    "2*x0 + 9*x5 <= 270",
    "2**2*x0**2 + 12**2*x1**2 <= 72",
    "12**2*x1**2 + 2**2*x3**2 <= 264",
    "2*x3 + 5*x4 <= 200",
    "2**2*x0**2 + 5**2*x4**2 <= 289",
    "12*x1 + 2*x2 <= 104",
    "12**2*x1**2 + 5**2*x4**2 <= 96",
    "2*x0 + 2*x3 <= 147",
    "2*x0 + 2*x3 + 5*x4 <= 276",
    "2**2*x0**2 + 2**2*x2**2 + 2**2*x3**2 <= 147",
    "12*x1 + 2*x3 + 9*x5 <= 113",
    "2*x2 + 2*x3 + 5*x4 <= 226",
    "2**2*x3**2 + 5**2*x4**2 + 9**2*x5**2 <= 83",
    "2**2*x2**2 + 5**2*x4**2 + 9**2*x5**2 <= 173",
    "2**2*x0**2 + 12**2*x1**2 + 5**2*x4**2 <= 183",
    "2*x0 + 12*x1 + 9*x5 <= 228",
    "12*x1 + 2*x3 + 5*x4 <= 204",
    "2**2*x0**2 + 2**2*x2**2 + 9**2*x5**2 <= 52",
    "2*x0 + 2*x2 + 5*x4 <= 156",
    "12**2*x1**2 + 2**2*x2**2 + 5**2*x4**2 <= 248",
    "12*x1 + 2*x2 + 9*x5 <= 104",
    "2**2*x2**2 + 2**2*x3**2 + 9**2*x5**2 <= 214",
    "2*x0 + 5*x4 + 9*x5 <= 161",
    "2**2*x0**2 + 12**2*x1**2 + 2**2*x2**2 <= 278",
    "2**2*x0**2 + 12**2*x1**2 + 2**2*x3**2 <= 90",
    "2*x0 + 12*x1 + 2*x2 + 2*x3 + 5*x4 + 9*x5 <= 90",
    "8*x0 + 7*x4 <= 100",
    "7*x4 + 4*x5 <= 40",
    "7*x3 + 4*x5 <= 199",
    "12**2*x2**2 + 7**2*x4**2 <= 129",
    "12**2*x2**2 + 7**2*x3**2 <= 88",
    "12*x2 + 4*x5 <= 161",
    "7**2*x3**2 + 7**2*x4**2 <= 116",
    "5**2*x1**2 + 7**2*x3**2 <= 51",
    "8**2*x0**2 + 5**2*x1**2 <= 177",
    "8*x0 + 4*x5 <= 112",
    "8*x0 + 12*x2 <= 48",
    "8*x0 + 7*x3 <= 61",
    "12**2*x2**2 + 7**2*x3**2 + 7**2*x4**2 <= 59",
    "8*x0 + 5*x1 + 4*x5 <= 84",
    "8**2*x0**2 + 7**2*x3**2 + 7**2*x4**2 <= 89",
    "5*x1 + 7*x3 + 4*x5 <= 73",
    "5**2*x1**2 + 7**2*x3**2 + 7**2*x4**2 <= 161",
    "8**2*x0**2 + 12**2*x2**2 + 7**2*x4**2 <= 44",
    "8*x0 + 5*x1 + 12*x2 + 7*x3 + 7*x4 + 4*x5 <= 44"
  ]
}
```

```python
import gurobipy as gp
from gurobipy import GRB

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

# Create variables
candles = m.addVar(vtype=GRB.INTEGER, name="candles")
packs_of_paper_plates = m.addVar(vtype=GRB.INTEGER, name="packs_of_paper_plates")
paper_towel_rolls = m.addVar(vtype=GRB.INTEGER, name="paper_towel_rolls")
cartons_of_milk = m.addVar(vtype=GRB.INTEGER, name="cartons_of_milk")
toilet_paper_rolls = m.addVar(vtype=GRB.INTEGER, name="toilet_paper_rolls")
packs_of_napkins = m.addVar(vtype=GRB.INTEGER, name="packs_of_napkins")


# Set objective function
m.setObjective(4*candles*packs_of_paper_plates + 3*candles*packs_of_napkins + 6*packs_of_paper_plates**2 + packs_of_paper_plates*toilet_paper_rolls + 2*packs_of_paper_plates*packs_of_napkins + 9*paper_towel_rolls**2 + 9*paper_towel_rolls*packs_of_napkins + 2*cartons_of_milk*toilet_paper_rolls + 5*cartons_of_milk*packs_of_napkins + 9*toilet_paper_rolls**2 + 9*paper_towel_rolls + 5*toilet_paper_rolls + 9*packs_of_napkins, GRB.MAXIMIZE)

# Add constraints
m.addConstr(2*candles + 12*packs_of_paper_plates + 2*paper_towel_rolls + 2*cartons_of_milk + 5*toilet_paper_rolls + 9*packs_of_napkins <= 305)
m.addConstr(8*candles + 5*packs_of_paper_plates + 12*paper_towel_rolls + 7*cartons_of_milk + 7*toilet_paper_rolls + 4*packs_of_napkins <= 201)
# ... (add all other constraints similarly, substituting variable names)


# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print("Optimization ended with status %d" % m.status)

```