```json
{
  "sym_variables": [
    ("x0", "packs of napkins"),
    ("x1", "rubber gloves"),
    ("x2", "lightbulbs"),
    ("x3", "cookies"),
    ("x4", "toilet paper rolls")
  ],
  "objective_function": "6*x0 + 5*x1 + 2*x2 + 8*x3 + 2*x4",
  "constraints": [
    "13.56*x0 + 14.78*x3 >= 28",
    "11.3*x1 + 0.93*x2 >= 31",
    "0.93*x2 + 1.38*x4 >= 11",
    "13.56*x0 + 0.93*x2 >= 16",
    "13.56*x0 + 14.78*x3 + 1.38*x4 >= 22",
    "11.3*x1 + 0.93*x2 + 1.38*x4 >= 22",
    "13.56*x0 + 11.3*x1 + 14.78*x3 >= 22",
    "11.3*x1 + 0.93*x2 + 14.78*x3 >= 22",
    "13.56*x0 + 14.78*x3 + 1.38*x4 >= 20",
    "11.3*x1 + 0.93*x2 + 1.38*x4 >= 20",
    "13.56*x0 + 11.3*x1 + 14.78*x3 >= 20",
    "11.3*x1 + 0.93*x2 + 14.78*x3 >= 20",
    "13.56*x0 + 14.78*x3 + 1.38*x4 >= 20",
    "11.3*x1 + 0.93*x2 + 1.38*x4 >= 20",
    "13.56*x0 + 11.3*x1 + 14.78*x3 >= 20",
    "11.3*x1 + 0.93*x2 + 14.78*x3 >= 20",
    "13.56*x0 + 14.78*x3 + 1.38*x4 >= 30",
    "11.3*x1 + 0.93*x2 + 1.38*x4 >= 30",
    "13.56*x0 + 11.3*x1 + 14.78*x3 >= 30",
    "11.3*x1 + 0.93*x2 + 14.78*x3 >= 30",
    "2.75*x1 + 14.35*x2 + 3.84*x3 >= 19",
    "13.17*x0 + 2.75*x1 + 13.36*x4 >= 19",
    "2.75*x1 + 3.84*x3 + 13.36*x4 >= 19",
    "13.17*x0 + 3.84*x3 + 13.36*x4 >= 19",
    "2.75*x1 + 14.35*x2 + 3.84*x3 >= 25",
    "13.17*x0 + 2.75*x1 + 13.36*x4 >= 25",
    "2.75*x1 + 3.84*x3 + 13.36*x4 >= 25",
    "13.17*x0 + 3.84*x3 + 13.36*x4 >= 25",
    "2.75*x1 + 14.35*x2 + 3.84*x3 >= 27",
    "13.17*x0 + 2.75*x1 + 13.36*x4 >= 27",
    "2.75*x1 + 3.84*x3 + 13.36*x4 >= 27",
    "13.17*x0 + 3.84*x3 + 13.36*x4 >= 27",
    "2.75*x1 + 14.35*x2 + 3.84*x3 >= 22",
    "13.17*x0 + 2.75*x1 + 13.36*x4 >= 22",
    "2.75*x1 + 3.84*x3 + 13.36*x4 >= 22",
    "13.17*x0 + 3.84*x3 + 13.36*x4 >= 22",
    "0.93*x2 + 14.78*x3 <= 85",
    "13.56*x0 + 14.78*x3 <= 155",
    "11.3*x1 + 0.93*x2 + 1.38*x4 <= 60",
    "11.3*x1 + 0.93*x2 + 14.78*x3 <= 146",
    "13.56*x0 + 11.3*x1 + 0.93*x2 + 14.78*x3 + 1.38*x4 <= 146",
    "14.35*x2 + 3.84*x3 <= 31",
    "13.17*x0 + 13.36*x4 <= 53",
    "2.75*x1 + 3.84*x3 <= 62",
    "13.17*x0 + 14.35*x2 <= 92",
    "3.84*x3 + 13.36*x4 <= 104",
    "14.35*x2 + 13.36*x4 <= 72",
    "13.17*x0 + 2.75*x1 <= 110",
    "13.17*x0 + 3.84*x3 <= 115",
    "13.17*x0 + 2.75*x1 + 14.35*x2 + 3.84*x3 + 13.36*x4 <= 115",
    "13.56*x0 + 11.3*x1 + 0.93*x2 + 14.78*x3 + 1.38*x4 <= 158",  
    "13.17*x0 + 2.75*x1 + 14.35*x2 + 3.84*x3 + 13.36*x4 <= 137" 
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
napkins = model.addVar(vtype=gp.GRB.INTEGER, name="napkins")
gloves = model.addVar(vtype=gp.GRB.INTEGER, name="gloves")
lightbulbs = model.addVar(vtype=gp.GRB.INTEGER, name="lightbulbs")
cookies = model.addVar(vtype=gp.GRB.INTEGER, name="cookies")
toilet_paper = model.addVar(vtype=gp.GRB.INTEGER, name="toilet_paper")

# Set objective function
model.setObjective(6*napkins + 5*gloves + 2*lightbulbs + 8*cookies + 2*toilet_paper, gp.GRB.MAXIMIZE)

# Add constraints
model.addConstr(13.56*napkins + 14.78*cookies >= 28)
model.addConstr(11.3*gloves + 0.93*lightbulbs >= 31)
model.addConstr(0.93*lightbulbs + 1.38*toilet_paper >= 11)
model.addConstr(13.56*napkins + 0.93*lightbulbs >= 16)
model.addConstr(13.56*napkins + 14.78*cookies + 1.38*toilet_paper >= 22)
model.addConstr(11.3*gloves + 0.93*lightbulbs + 1.38*toilet_paper >= 22)
model.addConstr(13.56*napkins + 11.3*gloves + 14.78*cookies >= 22)
model.addConstr(11.3*gloves + 0.93*lightbulbs + 14.78*cookies >= 22)
model.addConstr(13.56*napkins + 14.78*cookies + 1.38*toilet_paper >= 30)
model.addConstr(11.3*gloves + 0.93*lightbulbs + 1.38*toilet_paper >= 30)
model.addConstr(13.56*napkins + 11.3*gloves + 14.78*cookies >= 30)
model.addConstr(11.3*gloves + 0.93*lightbulbs + 14.78*cookies >= 30)


model.addConstr(2.75*gloves + 14.35*lightbulbs + 3.84*cookies >= 19)
model.addConstr(13.17*napkins + 2.75*gloves + 13.36*toilet_paper >= 19)
model.addConstr(2.75*gloves + 3.84*cookies + 13.36*toilet_paper >= 19)
model.addConstr(13.17*napkins + 3.84*cookies + 13.36*toilet_paper >= 19)
model.addConstr(2.75*gloves + 14.35*lightbulbs + 3.84*cookies >= 25)
model.addConstr(13.17*napkins + 2.75*gloves + 13.36*toilet_paper >= 25)
model.addConstr(2.75*gloves + 3.84*cookies + 13.36*toilet_paper >= 25)
model.addConstr(13.17*napkins + 3.84*cookies + 13.36*toilet_paper >= 25)
model.addConstr(2.75*gloves + 14.35*lightbulbs + 3.84*cookies >= 27)
model.addConstr(13.17*napkins + 2.75*gloves + 13.36*toilet_paper >= 27)
model.addConstr(2.75*gloves + 3.84*cookies + 13.36*toilet_paper >= 27)
model.addConstr(13.17*napkins + 3.84*cookies + 13.36*toilet_paper >= 27)


model.addConstr(0.93*lightbulbs + 14.78*cookies <= 85)
model.addConstr(13.56*napkins + 14.78*cookies <= 155)
model.addConstr(11.3*gloves + 0.93*lightbulbs + 1.38*toilet_paper <= 60)
model.addConstr(11.3*gloves + 0.93*lightbulbs + 14.78*cookies <= 146)
model.addConstr(13.56*napkins + 11.3*gloves + 0.93*lightbulbs + 14.78*cookies + 1.38*toilet_paper <= 146)
model.addConstr(14.35*lightbulbs + 3.84*cookies <= 31)
model.addConstr(13.17*napkins + 13.36*toilet_paper <= 53)
model.addConstr(2.75*gloves + 3.84*cookies <= 62)
model.addConstr(13.17*napkins + 14.35*lightbulbs <= 92)
model.addConstr(3.84*cookies + 13.36*toilet_paper <= 104)
model.addConstr(14.35*lightbulbs + 13.36*toilet_paper <= 72)
model.addConstr(13.17*napkins + 2.75*gloves <= 110)
model.addConstr(13.17*napkins + 3.84*cookies <= 115)
model.addConstr(13.17*napkins + 2.75*gloves + 14.35*lightbulbs + 3.84*cookies + 13.36*toilet_paper <= 115)

model.addConstr(13.56*napkins + 11.3*gloves + 0.93*lightbulbs + 14.78*cookies + 1.38*toilet_paper <= 158)
model.addConstr(13.17*napkins + 2.75*gloves + 14.35*lightbulbs + 3.84*cookies + 13.36*toilet_paper <= 137)


# Optimize model
model.optimize()

# Print results
if model.status == gp.GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Napkins: {napkins.x}")
    print(f"Gloves: {gloves.x}")
    print(f"Lightbulbs: {lightbulbs.x}")
    print(f"Cookies: {cookies.x}")
    print(f"Toilet Paper: {toilet_paper.x}")
    print(f"Objective value: {model.objVal}")
elif model.status == gp.GRB.INFEASIBLE:
    print("Model is infeasible.")
else:
    print(f"Optimization terminated with status {model.status}")

```