from fractions import Fraction N,W = list(map(int,input().split())) item = [] for _ in range(N): v,w = list(map(int,input().split())) item.append((v,w)) item.sort(key=lambda x:Fraction(x[0],x[1])) SIZE = 2*10**6 dp = [-1] * (SIZE+1) dp[0] = 0 for i in range(N): v,w = item[i] for j in range(SIZE): if(j+w > SIZE):break dp[j+w] = max(dp[j+w], dp[j] + v) if(W >= SIZE): v,w = item[-1] # W - w*x < SIZE # W - SIZE < w*x # (W - SIZE) / w < x x = -(-(W - SIZE)//w) print(max(dp[:W - w*x + 1]) + v*x) else: print(max(dp[:W+1]))