import sys input = sys.stdin.readline N,W=map(int,input().split()) VW=[list(map(int,input().split())) for i in range(N)] VW.sort(key=lambda x:x[0]/x[1],reverse=True) DP=[0]*(10**7+1) for v,w in VW: for i in range(10**7+1): if i+w<=10**7: DP[i+w]=max(DP[i+w],DP[i]+v) if W<=10**7: print(DP[W]) else: v0,w0=VW[0] k=(W-10**7)//w0 W1=W-(k+1)*w0 V1=(k+1)*v0 print(V1+DP[W1])