## Step 1: Define the symbolic representation of the variables
The variables are: 
- lightbulbs
- paper towel rolls
- candles
- toilet paper rolls
- rubber gloves

Let's denote them as:
- $x_1$ for lightbulbs
- $x_2$ for paper towel rolls
- $x_3$ for candles
- $x_4$ for toilet paper rolls
- $x_5$ for rubber gloves

## Step 2: Determine the coefficients and constraints from the problem description
The dollar values are given as:
- $x_1$ (lightbulbs) = $3
- $x_2$ (paper towel rolls) = $14
- $x_3$ (candles) = $25
- $x_4$ (toilet paper rolls) = $14
- $x_5$ (rubber gloves) = $12

## 3: Formulate the objective function
The objective function to minimize is: $5x_1 + 7x_2 + 3x_3 + 6x_4 + 8x_5$

## 4: List all the constraints
1. $3x_1 + 14x_2 + 25x_3 + 14x_4 + 12x_5 \geq 30$
2. $3x_1 + 14x_4 \geq 20$
3. $14x_2 + 25x_3 \geq 38$
4. $3x_1 + 25x_3 \geq 33$
5. $3x_1 + 14x_2 \geq 42$
6. $14x_4 + 12x_5 \geq 41$
7. $14x_2 + 12x_5 \geq 39$
8. $3x_1 + 12x_5 \geq 30$
9. $14x_2 + 12x_5 \leq 50$
10. $3x_1 + 14x_2 \leq 229$
11. $25x_3 + 12x_5 \leq 58$
12. $14x_4 + 12x_5 \leq 244$
13. $14x_2 + 14x_4 \leq 114$
14. $3x_1 + 25x_3 + 12x_5 \leq 244$
15. $14x_2 + 25x_3 + 14x_4 \leq 109$
16. $3x_1 + 14x_4 + 12x_5 \leq 196$

## 5: Define the symbolic representation of the problem
```json
{
    'sym_variables': [
        ('x1', 'lightbulbs'),
        ('x2', 'paper towel rolls'),
        ('x3', 'candles'),
        ('x4', 'toilet paper rolls'),
        ('x5', 'rubber gloves')
    ],
    'objective_function': '5*x1 + 7*x2 + 3*x3 + 6*x4 + 8*x5',
    'constraints': [
        '3*x1 + 14*x2 + 25*x3 + 14*x4 + 12*x5 >= 30',
        '3*x1 + 14*x4 >= 20',
        '14*x2 + 25*x3 >= 38',
        '3*x1 + 25*x3 >= 33',
        '3*x1 + 14*x2 >= 42',
        '14*x4 + 12*x5 >= 41',
        '14*x2 + 12*x5 >= 39',
        '3*x1 + 12*x5 >= 30',
        '14*x2 + 12*x5 <= 50',
        '3*x1 + 14*x2 <= 229',
        '25*x3 + 12*x5 <= 58',
        '14*x4 + 12*x5 <= 244',
        '14*x2 + 14*x4 <= 114',
        '3*x1 + 25*x3 + 12*x5 <= 244',
        '14*x2 + 25*x3 + 14*x4 <= 109',
        '3*x1 + 14*x4 + 12*x5 <= 196'
    ]
}
```

## 6: Write the Gurobi code to solve the optimization problem
```python
import gurobi

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

    # Define the variables
    x1 = model.addVar(name='lightbulbs', vtype=gurobi.GRB.INTEGER)
    x2 = model.addVar(name='paper towel rolls', vtype=gurobi.GRB.INTEGER)
    x3 = model.addVar(name='candles', vtype=gurobi.GRB.INTEGER)
    x4 = model.addVar(name='toilet paper rolls', vtype=gurobi.GRB.INTEGER)
    x5 = model.addVar(name='rubber gloves', vtype=gurobi.GRB.INTEGER)

    # Define the objective function
    model.setObjective(5*x1 + 7*x2 + 3*x3 + 6*x4 + 8*x5, gurobi.GRB.MINIMIZE)

    # Add constraints
    model.addConstr(3*x1 + 14*x2 + 25*x3 + 14*x4 + 12*x5 >= 30)
    model.addConstr(3*x1 + 14*x4 >= 20)
    model.addConstr(14*x2 + 25*x3 >= 38)
    model.addConstr(3*x1 + 25*x3 >= 33)
    model.addConstr(3*x1 + 14*x2 >= 42)
    model.addConstr(14*x4 + 12*x5 >= 41)
    model.addConstr(14*x2 + 12*x5 >= 39)
    model.addConstr(3*x1 + 12*x5 >= 30)
    model.addConstr(14*x2 + 12*x5 <= 50)
    model.addConstr(3*x1 + 14*x2 <= 229)
    model.addConstr(25*x3 + 12*x5 <= 58)
    model.addConstr(14*x4 + 12*x5 <= 244)
    model.addConstr(14*x2 + 14*x4 <= 114)
    model.addConstr(3*x1 + 25*x3 + 12*x5 <= 244)
    model.addConstr(14*x2 + 25*x3 + 14*x4 <= 109)
    model.addConstr(3*x1 + 14*x4 + 12*x5 <= 196)

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print('Objective: ', model.objVal)
        print('Lightbulbs: ', x1.varValue)
        print('Paper towel rolls: ', x2.varValue)
        print('Candles: ', x3.varValue)
        print('Toilet paper rolls: ', x4.varValue)
        print('Rubber gloves: ', x5.varValue)
    else:
        print('No optimal solution found')

solve_optimization_problem()
```