N,V=map(int,input().split())#N为物品种数,V为背包容积
v=[0]#体积数组
w=[0]#价值数组
for i in range(N):
a,b=map(int,input().split())#a为第 i 种物品的体积,b为价值
v.append(a)
w.append(b)
dp=[[0]*(V+1) for i in range(N+1)]
for i in range(N+1):
for j in range(V+1):
if j<v[i]:
dp[i][j]=dp[i-1][j]
else:
dp[i][j]=max(dp[i-1][j],dp[i][j-v[i]]+w[i])
print(dp[-1][-1])
N,V=map(int,input().split())#N为物品种数,V为背包容积
v=[0]#体积数组
w=[0]#价值数组
for i in range(N):
a,b=map(int,input().split())#a为第 i 种物品的体积,b为价值
v.append(a)
w.append(b)
dp=[0]*(V+1)
for i in range(N+1):
for j in range(v[i],V+1):
dp[j]=max(dp[j],dp[j-v[i]]+w[i])
print(dp[-1])