## Problem Description and Formulation

The company produces two products: surfboards and skateboards. The production of each product requires two resources: wood and paint. The goal is to maximize profit given the limited availability of these resources.

### Decision Variables
- Let \(S\) be the number of surfboards produced.
- Let \(K\) be the number of skateboards produced.

### Objective Function
The profit per surfboard is $70, and the profit per skateboard is $45. The objective is to maximize the total profit \(P\), which can be represented as:
\[ P = 70S + 45K \]

### Constraints
1. **Wood Constraint**: Each surfboard requires 5 units of wood, and each skateboard requires 4 units of wood. There are 700 units of wood available.
\[ 5S + 4K \leq 700 \]

2. **Paint Constraint**: Each surfboard requires 3 units of paint, and each skateboard requires 2 units of paint. There are 320 units of paint available.
\[ 3S + 2K \leq 320 \]

3. **Non-Negativity Constraints**: The number of surfboards and skateboards produced cannot be negative.
\[ S \geq 0, K \geq 0 \]

### Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    S = model.addVar(lb=0, name="Surfboards")
    K = model.addVar(lb=0, name="Skateboards")

    # Define the objective function
    model.setObjective(70 * S + 45 * K, gurobi.GRB.MAXIMIZE)

    # Add the wood constraint
    model.addConstr(5 * S + 4 * K <= 700, name="Wood_Constraint")

    # Add the paint constraint
    model.addConstr(3 * S + 2 * K <= 320, name="Paint_Constraint")

    # Optimize the model
    model.optimize()

    # Check if the model is optimized
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution found. Surfboards: {S.varValue}, Skateboards: {K.varValue}")
        print(f"Maximum profit: ${70 * S.varValue + 45 * K.varValue}")
    else:
        print("The model is infeasible.")

solve_optimization_problem()
```

This code defines the optimization problem using Gurobi's Python interface, solves it, and prints out the optimal production levels for surfboards and skateboards, along with the maximum achievable profit. If the problem is infeasible (i.e., no solution satisfies all constraints), it indicates that as well.