To solve this problem, we first need to define the decision variables and the objective function. Let's denote the number of Pizza A to be made as `x` and the number of Pizza B to be made as `y`. The profit per pizza A is $3, and the profit per pizza B is $4. Thus, the total profit can be represented by the equation `3x + 4y`.

We also have constraints based on the availability of mozzarella and American cheese. For mozzarella cheese, Pizza A requires 4 units, and Pizza B requires 5 units, with a total of 600 units available. This gives us the inequality `4x + 5y <= 600`. For American cheese, Pizza A requires 5 units, and Pizza B requires 3 units, with a total of 500 units available, leading to the inequality `5x + 3y <= 500`.

Additionally, we know that `x` and `y` must be non-negative since they represent quantities of pizzas.

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("Pizza_Profit")

# Define the decision variables
x = m.addVar(name="Pizza_A", vtype=GRB.INTEGER, lb=0)
y = m.addVar(name="Pizza_B", vtype=GRB.INTEGER, lb=0)

# Set the objective function to maximize profit
m.setObjective(3*x + 4*y, GRB.MAXIMIZE)

# Add constraints for mozzarella and American cheese availability
m.addConstr(4*x + 5*y <= 600, name="Mozzarella_Cheese_Constraint")
m.addConstr(5*x + 3*y <= 500, name="American_Cheese_Constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: Make {x.x} Pizza A and {y.x} Pizza B")
    print(f"Maximum Profit: ${3*x.x + 4*y.x}")
else:
    print("No optimal solution found")

```