```json
{
  "sym_variables": [
    ("x0", "hours worked by Mary"),
    ("x1", "hours worked by Hank"),
    ("x2", "hours worked by Bill"),
    ("x3", "hours worked by Jean")
  ],
  "objective_function": "8.57 * x0 + 3.55 * x1 + 6.72 * x2 + 7.3 * x3",
  "constraints": [
    "0.43 * x1 + 6.07 * x2 >= 13",
    "11.9 * x0 + 3.45 * x1 + 2.28 * x2 >= 17",
    "1.5 * x2 + 6.82 * x3 >= 10",
    "8.64 * x1 + 6.82 * x3 >= 16",
    "8.64 * x1 + 1.5 * x2 >= 11",
    "0.38 * x0 + 8.64 * x1 + 1.5 * x2 >= 25",
    "8.64 * x1 + 1.5 * x2 + 6.82 * x3 >= 25",
    "0.38 * x0 + 1.5 * x2 + 6.82 * x3 >= 25",
    "0.38 * x0 + 8.64 * x1 + 6.82 * x3 >= 25",
    "0.38 * x0 + 8.64 * x1 + 1.5 * x2 >= 19",
    "8.64 * x1 + 1.5 * x2 + 6.82 * x3 >= 19",
    "0.38 * x0 + 1.5 * x2 + 6.82 * x3 >= 19",
    "0.38 * x0 + 8.64 * x1 + 6.82 * x3 >= 19",
    "0.38 * x0 + 8.64 * x1 + 1.5 * x2 >= 21",
    "8.64 * x1 + 1.5 * x2 + 6.82 * x3 >= 21",
    "0.38 * x0 + 1.5 * x2 + 6.82 * x3 >= 21",
    "0.38 * x0 + 8.64 * x1 + 6.82 * x3 >= 21",
    "0.38 * x0 + 8.64 * x1 + 1.5 * x2 >= 23",
    "8.64 * x1 + 1.5 * x2 + 6.82 * x3 >= 23",
    "0.38 * x0 + 1.5 * x2 + 6.82 * x3 >= 23",
    "0.38 * x0 + 8.64 * x1 + 6.82 * x3 >= 23",
    "11.2 * x1 + 1.61 * x2 >= 12",
    "11.2 * x1 + 1.61 * x2 + 3.55 * x3 >= 22",
    "5.99 * x0 + 0.43 * x1 <= 98",
    "0.43 * x1 + 11.82 * x3 <= 69",
    "5.99 * x0 + 6.07 * x2 <= 86",
    "0.43 * x1 + 6.07 * x2 + 11.82 * x3 <= 48",
    "5.99 * x0 + 6.07 * x2 + 11.82 * x3 <= 80",
    "5.99 * x0 + 0.43 * x1 + 6.07 * x2 + 11.82 * x3 <= 80",
    "3.45 * x1 + 6.68 * x3 <= 84",
    "11.9 * x0 + 3.45 * x1 <= 106",
    "11.9 * x0 + 2.28 * x2 <= 74",
    "2.28 * x2 + 6.68 * x3 <= 78",
    "11.9 * x0 + 6.68 * x3 <= 86",
    "11.9 * x0 + 3.45 * x1 + 6.68 * x3 <= 56",
    "11.9 * x0 + 2.28 * x2 + 6.68 * x3 <= 118",
    "11.9 * x0 + 3.45 * x1 + 2.28 * x2 + 6.68 * x3 <= 118",
    "8.64 * x1 + 6.82 * x3 <= 50",
    "0.38 * x0 + 8.64 * x1 <= 69",
    "0.38 * x0 + 1.5 * x2 + 6.82 * x3 <= 35",
    "0.38 * x0 + 8.64 * x1 + 1.5 * x2 <= 55",
    "0.38 * x0 + 8.64 * x1 + 6.82 * x3 <= 44",
    "0.38 * x0 + 8.64 * x1 + 1.5 * x2 + 6.82 * x3 <= 44",
    "11.2 * x1 + 1.61 * x2 <= 39",
    "1.61 * x2 + 3.55 * x3 <= 74",
    "6.39 * x0 + 3.55 * x3 <= 64",
    "6.39 * x0 + 11.2 * x1 + 1.61 * x2 + 3.55 * x3 <= 64"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
mary_hours = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="mary_hours")
hank_hours = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="hank_hours")
bill_hours = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="bill_hours")
jean_hours = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="jean_hours")


# Set objective function
m.setObjective(8.57 * mary_hours + 3.55 * hank_hours + 6.72 * bill_hours + 7.3 * jean_hours, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(0.43 * hank_hours + 6.07 * bill_hours >= 13)
m.addConstr(11.9 * mary_hours + 3.45 * hank_hours + 2.28 * bill_hours >= 17)
m.addConstr(1.5 * bill_hours + 6.82 * jean_hours >= 10)
m.addConstr(8.64 * hank_hours + 6.82 * jean_hours >= 16)
m.addConstr(8.64 * hank_hours + 1.5 * bill_hours >= 11)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 1.5 * bill_hours >= 25)
m.addConstr(8.64 * hank_hours + 1.5 * bill_hours + 6.82 * jean_hours >= 25)
m.addConstr(0.38 * mary_hours + 1.5 * bill_hours + 6.82 * jean_hours >= 25)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 6.82 * jean_hours >= 25)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 1.5 * bill_hours >= 19)
m.addConstr(8.64 * hank_hours + 1.5 * bill_hours + 6.82 * jean_hours >= 19)
m.addConstr(0.38 * mary_hours + 1.5 * bill_hours + 6.82 * jean_hours >= 19)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 6.82 * jean_hours >= 19)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 1.5 * bill_hours >= 21)
m.addConstr(8.64 * hank_hours + 1.5 * bill_hours + 6.82 * jean_hours >= 21)
m.addConstr(0.38 * mary_hours + 1.5 * bill_hours + 6.82 * jean_hours >= 21)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 6.82 * jean_hours >= 21)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 1.5 * bill_hours >= 23)
m.addConstr(8.64 * hank_hours + 1.5 * bill_hours + 6.82 * jean_hours >= 23)
m.addConstr(0.38 * mary_hours + 1.5 * bill_hours + 6.82 * jean_hours >= 23)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 6.82 * jean_hours >= 23)
m.addConstr(11.2 * hank_hours + 1.61 * bill_hours >= 12)
m.addConstr(11.2 * hank_hours + 1.61 * bill_hours + 3.55 * jean_hours >= 22)
m.addConstr(5.99 * mary_hours + 0.43 * hank_hours <= 98)
m.addConstr(0.43 * hank_hours + 11.82 * jean_hours <= 69)
m.addConstr(5.99 * mary_hours + 6.07 * bill_hours <= 86)
m.addConstr(0.43 * hank_hours + 6.07 * bill_hours + 11.82 * jean_hours <= 48)
m.addConstr(5.99 * mary_hours + 6.07 * bill_hours + 11.82 * jean_hours <= 80)
m.addConstr(5.99 * mary_hours + 0.43 * hank_hours + 6.07 * bill_hours + 11.82 * jean_hours <= 80)
m.addConstr(3.45 * hank_hours + 6.68 * jean_hours <= 84)
m.addConstr(11.9 * mary_hours + 3.45 * hank_hours <= 106)
m.addConstr(11.9 * mary_hours + 2.28 * bill_hours <= 74)
m.addConstr(2.28 * bill_hours + 6.68 * jean_hours <= 78)
m.addConstr(11.9 * mary_hours + 6.68 * jean_hours <= 86)
m.addConstr(11.9 * mary_hours + 3.45 * hank_hours + 6.68 * jean_hours <= 56)
m.addConstr(11.9 * mary_hours + 2.28 * bill_hours + 6.68 * jean_hours <= 118)
m.addConstr(11.9 * mary_hours + 3.45 * hank_hours + 2.28 * bill_hours + 6.68 * jean_hours <= 118)
m.addConstr(8.64 * hank_hours + 6.82 * jean_hours <= 50)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours <= 69)
m.addConstr(0.38 * mary_hours + 1.5 * bill_hours + 6.82 * jean_hours <= 35)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 1.5 * bill_hours <= 55)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 6.82 * jean_hours <= 44)
m.addConstr(0.38 * mary_hours + 8.64 * hank_hours + 1.5 * bill_hours + 6.82 * jean_hours <= 44)
m.addConstr(11.2 * hank_hours + 1.61 * bill_hours <= 39)
m.addConstr(1.61 * bill_hours + 3.55 * jean_hours <= 74)
m.addConstr(6.39 * mary_hours + 3.55 * jean_hours <= 64)
m.addConstr(6.39 * mary_hours + 11.2 * hank_hours + 1.61 * bill_hours + 3.55 * jean_hours <= 64)


# 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 problem is infeasible.")
else:
    print("The problem could not be solved to optimality.")

```