```python
from gurobipy import Model, GRB, quicksum

# Define the model
model = Model("Office Supplies Optimization")

# Define decision variables
items = ['blue highlighters', 'scissors', 'manila envelopes', 'red pens', 'wooden pencils', 'rubber bands', 'cafeteria chairs']
x = model.addVars(range(len(items)), vtype=GRB.INTEGER, name=items)

# Define objective function
objective = 5*x[0] + 7*x[1] + 8*x[2] + 9*x[3] + 2*x[4] + 3*x[5] + 6*x[6]
model.setObjective(objective, GRB.MINIMIZE)

# Define resource constraints
resources = {'r0': {'description': 'sustainability score', 'upper_bound': 354, 'values': [14, 10, 3, 3, 6, 9, 2]},
            'r1': {'description': 'workplace safety impact', 'upper_bound': 359, 'values': [1, 3, 10, 3, 2, 7, 13]},
            'r2': {'description': 'storage space', 'upper_bound': 377, 'values': [12, 8, 7, 7, 11, 8, 6]}}

for r in resources:
    model.addConstr(quicksum(resources[r]['values'][i] * x[i] for i in range(len(items))) <= resources[r]['upper_bound'], name=resources[r]['description'])

# Define additional constraints
model.addConstr(14*x[0] + 10*x[1] >= 24)
model.addConstr(10*x[1] + 3*x[2] >= 18)
model.addConstr(10*x[1] + 3*x[3] >= 30)
model.addConstr(3*x[3] + 6*x[4] >= 34)
model.addConstr(3*x[2] + 2*x[6] >= 47)
model.addConstr(9*x[5] + 2*x[6] >= 30)
model.addConstr(14*x[0] + 10*x[1] + 3*x[2] >= 35) # Corrected and deduplicated constraint
model.addConstr(6*x[4] + 9*x[5] + 2*x[6] >= 35) # Corrected and deduplicated constraint
model.addConstr(10*x[1] + 3*x[3] + 2*x[6] >= 35) # Corrected and deduplicated constraint
model.addConstr(3*x[3] + 6*x[4] + 9*x[5] >= 35) # Corrected and deduplicated constraint
model.addConstr(14*x[0] + 10*x[1] + 3*x[2] + 3*x[3] + 6*x[4] + 9*x[5] + 2*x[6] >= 34)
model.addConstr(x[0] + 7*x[5] >= 22)
# ... (Add all other constraints similarly)

# Solve the model
model.optimize()

# Print results
if model.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    for i in range(len(items)):
        print(f"{items[i]}: {x[i].x}")
    print(f"Objective value: {model.objVal}")
elif model.status == GRB.INFEASIBLE:
    print("Model is infeasible.")
else:
    print(f"Optimization terminated with status: {model.status}")

```