# ナップザック型dp # 入力例1でX=4のときは、W=1のときのベスト値を見ると2 # W=5でのベスト値は8だから、その差よりもよければ選ばれる、よって7 N, W = map(int, input().split()) WV = [] for i in range(N): w, v = map(int, input().split()) WV.append((w, v)) dp = [[0]*(W+1) for i in range(N+1)] for i in range(1, N+1): w, v = WV[i-1] for j in range(W+1): # not using dp[i][j] = max(dp[i][j], dp[i-1][j]) # using if j+w <= W: dp[i][j+w] = max(dp[i][j+w], dp[i-1][j]+v) #print(dp[i]) mx = dp[N][W] for i in range(1, W+1): ans = mx - dp[N][W-i]+1 print(ans)