from sys import stdin input = stdin.readline INF = 1<<60 N, M = map(int, input().split()) CD = [list(map(int, input().split())) for _ in range(N)] CD.sort(key=lambda x:x[0]) dp = [-INF]*(M+1) dp[0] = 0 ndp = [-INF]*(M+1) for C, D in CD: for i in range(M+1): ndp[i] = -INF for i in range(M+1): if dp[i] == -INF: continue ndp[i] = max(ndp[i], dp[i]) if i*2+C <= M: ndp[i*2+C] = max(ndp[i*2+C], dp[i]+D) dp, ndp = ndp, dp print(max(dp))