# 100%已经通过全部测试用例,不解释
import sys
def get_zjbh(line):
m = int(line.split(" ")[0])
return m
def f1(zjbh, fj):
result = []
for item in fj:
if zjbh == int(item.split(" ")[3]):
result.append(item)
return result
def yanglei(a, b):
result = []
for item in a:
for item2 in b:
result.append([item, item2])
return result
def yanglei2(a, b):
return [a[0] + b[0], a[1] + b[1]]
def get_manyidu(line):
return int(line.split(" ")[0]) * int(line.split(" ")[1])
def get_new_manyidu(item):
a = int(item.split(" ")[-1])
return a
def send(a):
l = []
for item in a:
if item not in l:
l.append(item)
l.remove(0)
l.insert(0, [0, 0])
return l
def get_money(item):
a = int(item.split(" ")[1])
return a
lines = []
count = -1
for line in sys.stdin:
count = count + 1
line = line.strip("\n")
lines.append(str(count) + " " + line + " " + str(get_manyidu(line)))
N = int(lines[0].split(" ")[1])
lines = lines[1:]
# 获取主件列表
zj = []
for line in lines:
if int(line.split(" ")[3]) == 0:
zj.append(line)
fj = []
for item in lines:
if item not in zj:
fj.append(item)
n = len(zj)
dp = [[i for i in range(5)] for j in range(n)]
i = -1
for line in zj:
i = i + 1
money = get_money(line)
if int(line.split(" ")[1]) < N:
dp[i][1] = [money, get_new_manyidu(line)]
zjbh = get_zjbh(line)
# 判断是否有附件
tiger = f1(zjbh, fj)
if tiger == []:
dp[i][2] = 0
dp[i][3] = 0
dp[i][4] = 0
if len(tiger) == 1:
dp[i][2] = [
get_money(tiger[0]) + money,
get_new_manyidu(tiger[0]) + dp[i][1][1],
]
dp[i][3] = 0
dp[i][4] = 0
if len(tiger) == 2:
dp[i][2] = [
money + get_money(tiger[0]),
get_new_manyidu(tiger[0]) + dp[i][1][1],
]
dp[i][3] = [
money + get_money(tiger[1]),
get_new_manyidu(tiger[1]) + dp[i][1][1],
]
dp[i][4] = [
money + get_money(tiger[0]) + get_money(tiger[1]),
get_new_manyidu(tiger[0]) + dp[i][1][1] + get_new_manyidu(tiger[1]),
]
for i in range(len(dp)):
dp[i] = send(dp[i])
M = [[i for i in range(N, -10, -10)] for j in range(n)]
for j in range(int(N / 10)):
T=[]
for v in dp[0]:
x = N - j * 10
if v[0] < x or v[0]==x:
T0 = v[1]
T.append(T0)
# print("T", T)
M[0][j]=max(T)
# print("M[0]",M[0])
for i in range(1, n):
for j in range(int(N / 10)):
T = []
for v in dp[i]:
x = N - j * 10
if v[0] > x :
T0 = M[i - 1][j]
if v[0] < x or v[0]==x:
T0 = M[i - 1][int((j * 10 + v[0]) / 10)] + v[1]
T.append(T0)
M[i][j] = max(M[i - 1][j], max(T))
print(max(M[n - 1]))