# translated sclara's c++ code into Python by ChatGPT 5.1 Thinking import sys def main(): data = list(map(int, sys.stdin.read().split())) it = iter(data) N = next(it) W = next(it) v = [0] * N w = [0] * N for i in range(N): v[i] = next(it) w[i] = next(it) ans = 0 bestv = v[0] bestw = w[0] maxw = w[0] for i in range(1, N): if bestv * w[i] < v[i] * bestw: bestv = v[i] bestw = w[i] if maxw < w[i]: maxw = w[i] least = (W - bestw * maxw + bestw) // bestw dp_size = bestw * maxw dp = [0] * dp_size for i in range(1, dp_size): for j in range(N): if w[j] <= i and dp[i] < dp[i - w[j]] + v[j]: dp[i] = dp[i - w[j]] + v[j] ans = least * bestv + dp[W - least * bestw] print(ans) if __name__ == "__main__": main()