```json
{
  "sym_variables": [
    ("x0", "diapers"),
    ("x1", "packs of napkins"),
    ("x2", "bottles of ibuprofen"),
    ("x3", "packs of paper plates")
  ],
  "objective_function": "5.02 * x0 + 2.81 * x1 + 8.52 * x2 + 9.37 * x3",
  "constraints": [
    "13.13 * x2 + 15.03 * x3 >= 74",
    "2.37 * x1 + 9.82 * x3 >= 42",
    "9.5 * x0 + 4.94 * x2 + 9.82 * x3 >= 33",
    "9.5 * x0 + 2.37 * x1 + 4.94 * x2 >= 33",
    "2.37 * x1 + 4.94 * x2 + 9.82 * x3 >= 33",
    "9.5 * x0 + 4.94 * x2 + 9.82 * x3 >= 63",
    "9.5 * x0 + 2.37 * x1 + 4.94 * x2 >= 63",
    "2.37 * x1 + 4.94 * x2 + 9.82 * x3 >= 63",
    "9.5 * x0 + 4.94 * x2 + 9.82 * x3 >= 58",
    "9.5 * x0 + 2.37 * x1 + 4.94 * x2 >= 58",
    "2.37 * x1 + 4.94 * x2 + 9.82 * x3 >= 58",
    "0.53 * x0 + 14.72 * x2 + 7.51 * x3 >= 59",
    "1.45 * x1 + 15.03 * x3 <= 126",
    "13.13 * x2 + 15.03 * x3 <= 230",
    "6.1 * x0 + 15.03 * x3 <= 90",
    "1.45 * x1 + 13.13 * x2 <= 300",
    "6.1 * x0 + 1.45 * x1 + 13.13 * x2 <= 229",
    "6.1 * x0 + 1.45 * x1 + 13.13 * x2 + 15.03 * x3 <= 229",
    "9.5 * x0 + 2.37 * x1 <= 148",
    "9.5 * x0 + 9.82 * x3 <= 125",
    "4.94 * x2 + 9.82 * x3 <= 73",
    "2.37 * x1 + 4.94 * x2 <= 252",
    "9.5 * x0 + 2.37 * x1 + 4.94 * x2 + 9.82 * x3 <= 252",
    "0.53 * x0 + 14.72 * x2 <= 219",
    "10.77 * x1 + 7.51 * x3 <= 240",
    "0.53 * x0 + 7.51 * x3 <= 174",
    "10.77 * x1 + 14.72 * x2 <= 119",
    "14.72 * x2 + 7.51 * x3 <= 176",
    "0.53 * x0 + 10.77 * x1 + 14.72 * x2 <= 140",
    "0.53 * x0 + 10.77 * x1 + 14.72 * x2 + 7.51 * x3 <= 140",
    "x0, x1, x2, x3 are integers",
    "6.1 * x0 + 1.45 * x1 + 13.13 * x2 + 15.03 * x3 <= 330",
    "9.5 * x0 + 2.37 * x1 + 4.94 * x2 + 9.82 * x3 <= 262",
    "0.53 * x0 + 10.77 * x1 + 14.72 * x2 + 7.51 * x3 <= 246"


  ]
}
```

```python
import gurobipy as gp

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

# Create variables
diapers = m.addVar(vtype=gp.GRB.INTEGER, name="diapers")
napkins = m.addVar(vtype=gp.GRB.INTEGER, name="napkins")
ibuprofen = m.addVar(vtype=gp.GRB.INTEGER, name="ibuprofen")
plates = m.addVar(vtype=gp.GRB.INTEGER, name="plates")

# Set objective function
m.setObjective(5.02 * diapers + 2.81 * napkins + 8.52 * ibuprofen + 9.37 * plates, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(13.13 * ibuprofen + 15.03 * plates >= 74)
m.addConstr(2.37 * napkins + 9.82 * plates >= 42)
m.addConstr(9.5 * diapers + 4.94 * ibuprofen + 9.82 * plates >= 33)
m.addConstr(9.5 * diapers + 2.37 * napkins + 4.94 * ibuprofen >= 33)
m.addConstr(2.37 * napkins + 4.94 * ibuprofen + 9.82 * plates >= 33)
m.addConstr(9.5 * diapers + 4.94 * ibuprofen + 9.82 * plates >= 63)
m.addConstr(9.5 * diapers + 2.37 * napkins + 4.94 * ibuprofen >= 63)
m.addConstr(2.37 * napkins + 4.94 * ibuprofen + 9.82 * plates >= 63)
m.addConstr(9.5 * diapers + 4.94 * ibuprofen + 9.82 * plates >= 58)
m.addConstr(9.5 * diapers + 2.37 * napkins + 4.94 * ibuprofen >= 58)
m.addConstr(2.37 * napkins + 4.94 * ibuprofen + 9.82 * plates >= 58)
m.addConstr(0.53 * diapers + 14.72 * ibuprofen + 7.51 * plates >= 59)
m.addConstr(1.45 * napkins + 15.03 * plates <= 126)
m.addConstr(13.13 * ibuprofen + 15.03 * plates <= 230)
m.addConstr(6.1 * diapers + 15.03 * plates <= 90)
m.addConstr(1.45 * napkins + 13.13 * ibuprofen <= 300)
m.addConstr(6.1 * diapers + 1.45 * napkins + 13.13 * ibuprofen <= 229)
m.addConstr(6.1 * diapers + 1.45 * napkins + 13.13 * ibuprofen + 15.03 * plates <= 229)
m.addConstr(9.5 * diapers + 2.37 * napkins <= 148)
m.addConstr(9.5 * diapers + 9.82 * plates <= 125)
m.addConstr(4.94 * ibuprofen + 9.82 * plates <= 73)
m.addConstr(2.37 * napkins + 4.94 * ibuprofen <= 252)
m.addConstr(9.5 * diapers + 2.37 * napkins + 4.94 * ibuprofen + 9.82 * plates <= 252)
m.addConstr(0.53 * diapers + 14.72 * ibuprofen <= 219)
m.addConstr(10.77 * napkins + 7.51 * plates <= 240)
m.addConstr(0.53 * diapers + 7.51 * plates <= 174)
m.addConstr(10.77 * napkins + 14.72 * ibuprofen <= 119)
m.addConstr(14.72 * ibuprofen + 7.51 * plates <= 176)
m.addConstr(0.53 * diapers + 10.77 * napkins + 14.72 * ibuprofen <= 140)
m.addConstr(0.53 * diapers + 10.77 * napkins + 14.72 * ibuprofen + 7.51 * plates <= 140)


# Resource Constraints from the context section
m.addConstr(6.1 * diapers + 1.45 * napkins + 13.13 * ibuprofen + 15.03 * plates <= 330)
m.addConstr(9.5 * diapers + 2.37 * napkins + 4.94 * ibuprofen + 9.82 * plates <= 262)
m.addConstr(0.53 * diapers + 10.77 * napkins + 14.72 * ibuprofen + 7.51 * plates <= 246)



# Optimize model
m.optimize()

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

```