# ナップザック問題の変形バージョン # ナップザックは1度だけやる # 入力例1でたとえばx=3ならW-3=2を見ると、ナップザックの最大価値3で現在のナップザックW最大価値8 # これでx=3の価値が5なら差がつかない、Wでの値が1を上回れば差がつくので、価値は6とする N, W = map(int, input().split()) weight = [] value = [] for n in range(N): w, v = map(int, input().split()) weight.append(w) value.append(v) dp = [[0] * (W+1) for i in range(N)] for i in range(N): for j in range(W+1): # use i if j - weight[i] >= 0: dp[i][j] = max(dp[i-1][j - weight[i]] + value[i], dp[i-1][j]) else: # no use set i dp[i][j] = dp[i-1][j] #print(dp[N-1]) for x in range(1, W+1): current_value = dp[N-1][W-x] current_diff = dp[N-1][W] - current_value ans = current_diff+1 print(ans)