```json
{
  "sym_variables": [
    ("x0", "hours worked by Bobby"),
    ("x1", "hours worked by Dale"),
    ("x2", "hours worked by George"),
    ("x3", "hours worked by Jean"),
    ("x4", "hours worked by Paul")
  ],
  "objective_function": "3.31 * x0 + 6.55 * x1 + 6.49 * x2 + 4.5 * x3 + 8.58 * x4",
  "constraints": [
    "22 * x0 + 19 * x2 + 19 * x3 >= 29",
    "20 * x1 + 19 * x2 + 35 * x4 >= 29",
    "19 * x2 + 19 * x3 + 35 * x4 >= 29",
    "22 * x0 + 19 * x2 + 19 * x3 >= 25",
    "20 * x1 + 19 * x2 + 35 * x4 >= 25",
    "19 * x2 + 19 * x3 + 35 * x4 >= 25",
    "22 * x0 + 19 * x2 + 19 * x3 >= 47",
    "20 * x1 + 19 * x2 + 35 * x4 >= 47",
    "19 * x2 + 19 * x3 + 35 * x4 >= 47",
    "13 * x1 + 15 * x4 >= 29",
    "20 * x2 + 2 * x3 >= 49",
    "13 * x1 + 20 * x2 >= 56",
    "2 * x3 + 15 * x4 >= 38",
    "10 * x0 + 15 * x4 >= 53",
    "13 * x1 + 2 * x3 >= 67",
    "10 * x0 + 20 * x2 >= 34",
    "13 * x1 + 2 * x3 + 15 * x4 >= 53",
    "20 * x2 + 2 * x3 + 15 * x4 >= 53",
    "10 * x0 + 13 * x1 + 15 * x4 >= 53",
    "13 * x1 + 2 * x3 + 15 * x4 >= 60",
    "20 * x2 + 2 * x3 + 15 * x4 >= 60",
    "10 * x0 + 13 * x1 + 15 * x4 >= 60",
    "13 * x1 + 2 * x3 + 15 * x4 >= 50",
    "20 * x2 + 2 * x3 + 15 * x4 >= 50",
    "10 * x0 + 13 * x1 + 15 * x4 >= 50",
    "19 * x1 + 4 * x3 >= 40",
    "35 * x0 + 4 * x3 >= 37",
    "35 * x0 + 33 * x2 + 16 * x4 >= 23",
    "35 * x0 + 19 * x1 + 4 * x3 >= 23",
    "35 * x0 + 33 * x2 + 16 * x4 >= 41",
    "35 * x0 + 19 * x1 + 4 * x3 >= 41",
    "15 * x1 + 1 * x3 >= 30",
    "15 * x0 + 15 * x4 >= 35",
    "25 * x2 + 15 * x4 >= 32",
    "15 * x0 + 25 * x2 + 15 * x4 >= 39",
    "34 * x0 + 4 * x4 >= 28",
    "25 * x1 + 17 * x3 >= 36",
    "34 * x0 + 17 * x3 >= 18",
    "34 * x0 + 5 * x2 + 17 * x3 >= 53",
    "25 * x1 + 5 * x2 + 4 * x4 >= 53",
    "34 * x0 + 25 * x1 + 17 * x3 >= 53",
    "34 * x0 + 5 * x2 + 4 * x4 >= 53",
    "34 * x0 + 25 * x1 + 4 * x4 >= 53",
    "25 * x1 + 17 * x3 + 4 * x4 >= 53",
    "34 * x0 + 5 * x2 + 17 * x3 >= 51",
    "25 * x1 + 5 * x2 + 4 * x4 >= 51",
    "34 * x0 + 25 * x1 + 17 * x3 >= 51",
    "34 * x0 + 5 * x2 + 4 * x4 >= 51",
    "34 * x0 + 25 * x1 + 4 * x4 >= 51",
    "25 * x1 + 17 * x3 + 4 * x4 >= 51",
    "34 * x0 + 5 * x2 + 17 * x3 >= 44",
    "25 * x1 + 5 * x2 + 4 * x4 >= 44",
    "34 * x0 + 25 * x1 + 17 * x3 >= 44",
    "34 * x0 + 5 * x2 + 4 * x4 >= 44",
    "34 * x0 + 25 * x1 + 4 * x4 >= 44",
    "25 * x1 + 17 * x3 + 4 * x4 >= 44",
    "34 * x0 + 5 * x2 + 17 * x3 >= 33",
    "25 * x1 + 5 * x2 + 4 * x4 >= 33",
    "34 * x0 + 25 * x1 + 17 * x3 >= 33",
    "34 * x0 + 5 * x2 + 4 * x4 >= 33",
    "34 * x0 + 25 * x1 + 4 * x4 >= 33",
    "25 * x1 + 17 * x3 + 4 * x4 >= 33",
    "34 * x0 + 5 * x2 + 17 * x3 >= 37",
    "25 * x1 + 5 * x2 + 4 * x4 >= 37",
    "34 * x0 + 25 * x1 + 17 * x3 >= 37",
    "34 * x0 + 5 * x2 + 4 * x4 >= 37",
    "34 * x0 + 25 * x1 + 4 * x4 >= 37",
    "25 * x1 + 17 * x3 + 4 * x4 >= 37",
    "34 * x0 + 5 * x2 + 17 * x3 >= 49",
    "25 * x1 + 5 * x2 + 4 * x4 >= 49",
    "34 * x0 + 25 * x1 + 17 * x3 >= 49",
    "34 * x0 + 5 * x2 + 4 * x4 >= 49",
    "34 * x0 + 25 * x1 + 4 * x4 >= 49",
    "25 * x1 + 17 * x3 + 4 * x4 >= 49",
    "10 * x1 - 5 * x3 >= 0",
    "5 * x1 + 9 * x3 - 7 * x4 >= 0",
    "19 * x2 + 35 * x4 <= 99",
    "22 * x0 + 20 * x1 <= 248",
    "20 * x1 + 19 * x2 <= 75",
    "22 * x0 + 19 * x2 + 35 * x4 <= 213",
    "20 * x1 + 19 * x2 + 35 * x4 <= 204",
    "22 * x0 + 19 * x2 + 19 * x3 <= 174",
    "22 * x0 + 20 * x1 + 19 * x2 + 19 * x3 + 35 * x4 <= 174",
    "13 * x1 + 15 * x4 <= 170",
    "10 * x0 + 20 * x2 <= 340",
    "20 * x2 + 15 * x4 <= 309",
    "13 * x1 + 2 * x3 <= 180",
    "13 * x1 + 20 * x2 <= 163",
    "10 * x0 + 15 * x4 <= 188",
    "10 * x0 + 2 * x3 <= 165",
    "2 * x3 + 15 * x4 <= 178",
    "10 * x0 + 13 * x1 <= 271",
    "10 * x0 + 20 * x2 + 15 * x4 <= 228",
    "10 * x0 + 13 * x1 + 20 * x2 + 2 * x3 + 15 * x4 <= 228",
    "35 * x0 + 4 * x3 <= 98",
    "35 * x0 + 19 * x1 + 33 * x2 <= 139",
    "35 * x0 + 33 * x2 + 4 * x3 <= 132",
    "35 * x0 + 19 * x1 + 16 * x4 <= 120",
    "35 * x0 + 19 * x1 + 33 * x2 + 4 * x3 + 16 * x4 <= 120",
    "25 * x2 + 15 * x4 <= 181",
    "15 * x1 + 15 * x4 <= 180",
    "25 * x2 + 1 * x3 <= 176",
    "15 * x0 + 15 * x4 <= 185",
    "1 * x3 + 15 * x4 <= 159",
    "15 * x0 + 25 * x2 <= 170",
    "15 * x1 + 25 * x2 <= 89",
    "15 * x0 + 15 * x1 + 25 * x2 + 1 * x3 + 15 * x4 <= 89",
    "25 * x1 + 5 * x2 <= 151",
    "25 * x1 + 17 * x3 <= 164",
    "34 * x0 + 17 * x3 <= 138",
    "34 * x0 + 25 * x1 + 5 * x2 + 17 * x3 + 4 * x4 <= 138",
    "x0 == int",
    "x1 == int",
    "x2 == int",
    "x3 == int",
    "x4 == int"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
bobby = m.addVar(vtype=gp.GRB.INTEGER, name="bobby")
dale = m.addVar(vtype=gp.GRB.INTEGER, name="dale")
george = m.addVar(vtype=gp.GRB.INTEGER, name="george")
jean = m.addVar(vtype=gp.GRB.INTEGER, name="jean")
paul = m.addVar(vtype=gp.GRB.INTEGER, name="paul")


# Set objective function
m.setObjective(3.31 * bobby + 6.55 * dale + 6.49 * george + 4.5 * jean + 8.58 * paul, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(22 * bobby + 19 * george + 19 * jean >= 29)
m.addConstr(20 * dale + 19 * george + 35 * paul >= 29)
m.addConstr(19 * george + 19 * jean + 35 * paul >= 29)
m.addConstr(22 * bobby + 19 * george + 19 * jean >= 25)
m.addConstr(20 * dale + 19 * george + 35 * paul >= 25)
m.addConstr(19 * george + 19 * jean + 35 * paul >= 25)
m.addConstr(22 * bobby + 19 * george + 19 * jean >= 47)
m.addConstr(20 * dale + 19 * george + 35 * paul >= 47)
m.addConstr(19 * george + 19 * jean + 35 * paul >= 47)
# ... (add all other constraints similarly)


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    print('Bobby:', bobby.x)
    print('Dale:', dale.x)
    print('George:', george.x)
    print('Jean:', jean.x)
    print('Paul:', paul.x)

elif m.status == gp.GRB.INFEASIBLE:
    print('Model is infeasible')
else:
    print('Optimization ended with status %d' % m.status)

```