Sure, here's a Python program to solve the given problem:\
----------------------------------------------------------------------------------------------------------
Python -
----------------------------------------------------------------------------------------------------------
def dfs(players, position_counts, overall_sum, price_sum, salary_sum, index, max_overall, max_overall_sum):
if index == len(players):
if position_counts["GK"] == 1 and 3 <= position_counts["DF"] <= 5 and 2 <= position_counts["MF"] <= 5 and position_counts["FW"] == 1 and price_sum <= M and salary_sum <= 120:
max_overall_sum[0] = max(max_overall_sum[0], overall_sum)
return
dfs(players, position_counts, overall_sum, price_sum, salary_sum, index + 1, max_overall, max_overall_sum)
player = players[index]
position, overall, price, salary = player
if position_counts[position] < 5:
position_counts[position] += 1
dfs(players, position_counts, overall_sum + overall, price_sum + price, salary_sum + salary, index + 1, max_overall, max_overall_sum)
position_counts[position] -= 1
N, M = map(int, input().split())
players = []
for _ in range(N):
position, overall, price, salary, name = input().split()
overall, price, salary = int(overall), int(price), int(salary)
players.append((position, overall, price, salary))
max_overall_sum = [0]
dfs(players, {"GK": 0, "DF": 0, "MF": 0, "FW": 0}, 0, 0, 0, 0, 11, max_overall_sum)
print(max_overall_sum[0] if max_overall_sum[0] > 0 else -1)
----------------------------------------------------------------------------------------------------------