f=open("rucsac.in","r")
s=f.readline().replace('\n','').split(' ')
n,G=int(s[0]),int(s[1])
ob=[]
for i in range(n):
s=f.readline().split(' ')
ob.append((int(s[0]),int(s[1])))
f.close()
'''sol=[0 for i in range(0,G+1)]
for (g,v) in ob:
for i in range(G,-1,-1):
if i-g>=0:
sol[i]=max(sol[i],sol[i-g]+v)
maxg=0
for i in sol:
maxg=max(maxg,i)
g=open("rucsac.out","w")
g.write(str(maxg))
g.close()'''
v1=[0 for i in range(0,G+1)]
v2=[0 for i in range(0,G+1)]
for i in range(0,n):
v2[0]=0
for j in range(1,G+1):
if ob[i][0]>j:
v2[j]=v1[j]
else:
v2[j]=max(v1[j],v1[j-ob[i][0]]+ob[i][1])
for i in range(0,G+1):
v1[i]=v2[i]
maxg=0
for i in v2:
maxg=max(maxg,i)
g=open("rucsac.out","w")
g.write(str(maxg))
g.close()