```json
{
  "sym_variables": [
    ("x0", "milligrams of vitamin C"),
    ("x1", "milligrams of vitamin B1"),
    ("x2", "milligrams of vitamin B6"),
    ("x3", "milligrams of zinc")
  ],
  "objective_function": "3*x0 + 1*x1 + 9*x2 + 9*x3",
  "constraints": [
    "7*x0 + 1*x1 >= 26",
    "7*x0 + 7*x3 >= 38",
    "7*x0 + 1*x1 + 8*x2 + 7*x3 >= 38",
    "11*x2 + 3*x3 >= 22",
    "8*x0 + 6*x1 >= 23",
    "6*x1 + 11*x2 + 3*x3 >= 21",
    "8*x0 + 6*x1 + 3*x3 >= 21",
    "8*x0 + 11*x2 + 3*x3 >= 21",
    "6*x1 + 11*x2 + 3*x3 >= 20",
    "8*x0 + 6*x1 + 3*x3 >= 20",
    "8*x0 + 11*x2 + 3*x3 >= 20",
    "6*x1 + 11*x2 + 3*x3 >= 12",
    "8*x0 + 6*x1 + 3*x3 >= 12",
    "8*x0 + 11*x2 + 3*x3 >= 12",
    "8*x0 + 6*x1 + 11*x2 + 3*x3 >= 12",
    "6*x1 + 11*x2 >= 18",
    "8*x0 + 11*x2 >= 21",
    "11*x2 + 7*x3 >= 33",
    "8*x0 + 6*x1 + 11*x2 + 7*x3 >= 33",
    "1*x0 - 8*x1 >= 0",
    "7*x0 + 7*x3 <= 61",
    "7*x0 + 8*x2 <= 133",
    "8*x2 + 7*x3 <= 89",
    "8*x0 + 3*x3 <= 41",
    "8*x0 + 6*x1 <= 39",
    "6*x1 + 11*x2 <= 89",
    "8*x0 + 11*x2 + 3*x3 <= 24",  
    "6*x1 + 11*x2 + 7*x3 <= 92",
    "7*x0 <= 201",
    "8*x0 <= 92",
    "8*x0 <= 141",
    "1*x1 <= 201",
    "6*x1 <= 92",
    "6*x1 <= 141",
    "8*x2 <= 201",
    "11*x2 <= 92",
    "11*x2 <= 141",
    "7*x3 <= 201",
    "3*x3 <= 92",
    "7*x3 <= 141"
  ]
}
```

```python
import gurobipy as gp

try:
    # Create a new model
    m = gp.Model("vitamin_optimization")

    # Create variables
    vitamin_c = m.addVar(vtype=gp.GRB.INTEGER, name="vitamin_c")
    vitamin_b1 = m.addVar(vtype=gp.GRB.INTEGER, name="vitamin_b1")
    vitamin_b6 = m.addVar(vtype=gp.GRB.CONTINUOUS, name="vitamin_b6")
    zinc = m.addVar(vtype=gp.GRB.INTEGER, name="zinc")

    # Set objective function
    m.setObjective(3 * vitamin_c + 1 * vitamin_b1 + 9 * vitamin_b6 + 9 * zinc, gp.GRB.MINIMIZE)

    # Add constraints
    m.addConstr(7 * vitamin_c + 1 * vitamin_b1 >= 26)
    m.addConstr(7 * vitamin_c + 7 * zinc >= 38)
    m.addConstr(7 * vitamin_c + 1 * vitamin_b1 + 8 * vitamin_b6 + 7 * zinc >= 38)
    m.addConstr(11 * vitamin_b6 + 3 * zinc >= 22)
    m.addConstr(8 * vitamin_c + 6 * vitamin_b1 >= 23)
    m.addConstr(6 * vitamin_b1 + 11 * vitamin_b6 + 3 * zinc >= 21)
    m.addConstr(8 * vitamin_c + 6 * vitamin_b1 + 3 * zinc >= 21)
    m.addConstr(8 * vitamin_c + 11 * vitamin_b6 + 3 * zinc >= 21)
    m.addConstr(6 * vitamin_b1 + 11 * vitamin_b6 + 3 * zinc >= 20)
    m.addConstr(8 * vitamin_c + 6 * vitamin_b1 + 3 * zinc >= 20)
    m.addConstr(8 * vitamin_c + 11 * vitamin_b6 + 3 * zinc >= 20)
    m.addConstr(6 * vitamin_b1 + 11 * vitamin_b6 + 3 * zinc >= 12)
    m.addConstr(8 * vitamin_c + 6 * vitamin_b1 + 3 * zinc >= 12)
    m.addConstr(8 * vitamin_c + 11 * vitamin_b6 + 3 * zinc >= 12)
    m.addConstr(8 * vitamin_c + 6 * vitamin_b1 + 11 * vitamin_b6 + 3 * zinc >= 12)
    m.addConstr(6 * vitamin_b1 + 11 * vitamin_b6 >= 18)
    m.addConstr(8 * vitamin_c + 11 * vitamin_b6 >= 21)
    m.addConstr(11 * vitamin_b6 + 7 * zinc >= 33)
    m.addConstr(8 * vitamin_c + 6 * vitamin_b1 + 11 * vitamin_b6 + 7 * zinc >= 33)
    m.addConstr(1 * vitamin_c - 8 * vitamin_b1 >= 0)
    m.addConstr(7 * vitamin_c + 7 * zinc <= 61)
    m.addConstr(7 * vitamin_c + 8 * vitamin_b6 <= 133)
    m.addConstr(8 * vitamin_b6 + 7 * zinc <= 89)
    m.addConstr(8 * vitamin_c + 3 * zinc <= 41)
    m.addConstr(8 * vitamin_c + 6 * vitamin_b1 <= 39)
    m.addConstr(6 * vitamin_b1 + 11 * vitamin_b6 <= 89)
    m.addConstr(8 * vitamin_c + 11 * vitamin_b6 + 3 * zinc <= 24)
    m.addConstr(6 * vitamin_b1 + 11 * vitamin_b6 + 7 * zinc <= 92)


    # Resource Constraints
    m.addConstr(7 * vitamin_c <= 201)
    m.addConstr(8 * vitamin_c <= 92)
    m.addConstr(8 * vitamin_c <= 141)
    m.addConstr(1 * vitamin_b1 <= 201)
    m.addConstr(6 * vitamin_b1 <= 92)
    m.addConstr(6 * vitamin_b1 <= 141)
    m.addConstr(8 * vitamin_b6 <= 201)
    m.addConstr(11 * vitamin_b6 <= 92)
    m.addConstr(11 * vitamin_b6 <= 141)
    m.addConstr(7 * zinc <= 201)
    m.addConstr(3 * zinc <= 92)
    m.addConstr(7 * zinc <= 141)



    # Optimize model
    m.optimize()

    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('Model is infeasible')
    else:
        print('Optimization ended with status %d' % m.status)


except gp.GurobiError as e:
    print('Error code ' + str(e.errno) + ": " + str(e))

except AttributeError:
    print('Encountered an attribute error')
```