## Problem Description and Gurobi Code

### Problem Description

The problem is an optimization problem with the goal of minimizing a linear objective function subject to various linear constraints. The variables are the hours worked by Mary, John, and Hank. The objective function to minimize is \(9.69M + 4.91J + 9.83H\), where \(M\), \(J\), and \(H\) represent the hours worked by Mary, John, and Hank, respectively.

### Constraints

1. Mary's paperwork competence rating is 3.
2. Mary has an organization score of 1.
3. John's paperwork competence rating is 7.
4. John has an organization score of 4.
5. Hank's paperwork competence rating is 6.
6. Hank has an organization score of 8.
7. \(3M + 6H \geq 36\)
8. \(3M + 7J + 6H \geq 36\)
9. \(4J + 8H \geq 18\)
10. \(1M + 8H \geq 16\)
11. \(1M + 4J + 8H \geq 36\)
12. \(-5M + 6H \geq 0\)
13. \(2J - 8H \geq 0\)
14. \(3M + 7J \leq 110\)
15. \(3M + 7J + 6H \leq 63\)

### Gurobi Code

```python
import gurobi

def optimization_problem():
    # Create a new model
    model = gurobi.Model()

    # Define variables
    M = model.addVar(lb=0, name="hours_worked_by_Mary")  # Hours worked by Mary
    J = model.addVar(lb=0, name="hours_worked_by_John")  # Hours worked by John
    H = model.addVar(lb=0, name="hours_worked_by_Hank")  # Hours worked by Hank

    # Objective function: Minimize 9.69M + 4.91J + 9.83H
    model.setObjective(9.69 * M + 4.91 * J + 9.83 * H, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(3 * M + 6 * H >= 36)  # Constraint 7
    model.addConstr(3 * M + 7 * J + 6 * H >= 36)  # Constraint 8
    model.addConstr(4 * J + 8 * H >= 18)  # Constraint 9
    model.addConstr(M + 8 * H >= 16)  # Constraint 10
    model.addConstr(M + 4 * J + 8 * H >= 36)  # Constraint 11
    model.addConstr(-5 * M + 6 * H >= 0)  # Constraint 12
    model.addConstr(2 * J - 8 * H >= 0)  # Constraint 13
    model.addConstr(3 * M + 7 * J <= 110)  # Constraint 14
    model.addConstr(3 * M + 7 * J + 6 * H <= 63)  # Constraint 15

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution found.")
        print(f"Hours worked by Mary: {M.varValue}")
        print(f"Hours worked by John: {J.varValue}")
        print(f"Hours worked by Hank: {H.varValue}")
        print(f"Objective function value: {model.objVal}")
    else:
        print("No optimal solution found.")

optimization_problem()
```