## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The tea shop offers two promotion packages, X and Y, with different compositions of green and black tea, and different profit margins. The goal is to find the optimal mix of packages X and Y that maximizes profit, given the limited availability of green and black tea.

Let's define the decision variables:

* `x`: the number of packages X to produce
* `y`: the number of packages Y to produce

The objective function is to maximize profit:

* Profit = 70x + 120y

The constraints are:

* Green tea availability: 5x + 3y ≤ 1200
* Black tea availability: 2x + 4y ≤ 900
* Non-negativity: x ≥ 0, y ≥ 0

## Gurobi Code

```python
import gurobi

# Create a new Gurobi model
m = gurobi.Model()

# Define the decision variables
x = m.addVar(lb=0, name="x")  # number of packages X
y = m.addVar(lb=0, name="y")  # number of packages Y

# Define the objective function
m.setObjective(70*x + 120*y, gurobi.GRB.MAXIMIZE)

# Define the constraints
m.addConstr(5*x + 3*y <= 1200, name="green_tea")
m.addConstr(2*x + 4*y <= 900, name="black_tea")

# Optimize the model
m.optimize()

# Print the results
if m.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Packages X: {x.varValue}")
    print(f"Packages Y: {y.varValue}")
    print(f"Maximum profit: ${m.objVal:.2f}")
else:
    print("No optimal solution found.")
```