## Problem Description and Formulation

The problem requires determining the number of long shots and mid-range shots a basketball team should make to maximize its efficiency, given certain constraints. The team must score at least 95 points, make at least 5 long shots in a game, and the efficiency for long shots and mid-range shots is 25% and 40%, respectively.

## Symbolic Representation

Let's denote:
- \(L\) as the number of long shots.
- \(M\) as the number of mid-range shots.

## Objective Function

The objective is to maximize efficiency. Efficiency can be considered as the ratio of points scored to the number of shots taken. However, since the number of shots is not directly given but rather the efficiency of each type of shot, we interpret maximizing efficiency as maximizing the points scored per shot attempt, adjusted for efficiency. But directly, we aim to maximize the total points scored under the given constraints, which inherently maximizes efficiency given the percentages.

## Constraints

1. **Score at least 95 points**: \(3L \times 0.25 + 2M \times 0.40 \geq 95\)
2. **At least 5 long shots**: \(L \geq 5\)
3. **Non-negativity**: \(L \geq 0, M \geq 0\). Since \(L \geq 5\), the \(L \geq 0\) is implicitly satisfied.

## Linear Programming Formulation

The problem can be formulated as:

Maximize: \(3L \times 0.25 + 2M \times 0.40\)

Subject to:
- \(0.75L + 0.8M \geq 95\)
- \(L \geq 5\)
- \(L, M \geq 0\)

## Gurobi Code

```python
import gurobi

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

    # Define variables
    L = model.addVar(lb=5, name="LongShots")  # At least 5 long shots
    M = model.addVar(lb=0, name="MidRangeShots")

    # Objective function: Maximize points scored
    model.setObjective(0.75*L + 0.8*M, gurobi.GRB.MAXIMIZE)

    # Constraint: Score at least 95 points
    model.addConstr(0.75*L + 0.8*M >= 95, name="ScoreConstraint")

    # Solve the model
    model.optimize()

    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution found.")
        print(f"Long Shots: {L.varValue}")
        print(f"Mid-range Shots: {M.varValue}")
        print(f"Total Score: {0.75*L.varValue + 0.8*M.varValue}")
    else:
        print("No optimal solution found.")

solve_basketball_shot_optimization()
```