N, W = map(int, input().split()) goods = [] for _ in range(N): v, w = map(int, input().split()) goods.append((v, w)) dp = [0] * min(600000, W+1) sz = len(dp) for v, w in goods: for i in range(sz): if i+w >= sz: break dp[i+w] = max(dp[i+w], dp[i] + v) ans = 0 for v, w in goods: x = W // w * v ans = max(ans, x) for i in range(1, sz): rest = W - (i-1) for v, w in goods: x = rest // w * v ans = max(ans, x + dp[i-1]) print(ans)