def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 K = int(input[idx]) idx += 1 pizzas = [] for _ in range(N): p = int(input[idx]) idx += 1 d = int(input[idx]) idx += 1 pizzas.append((p, d)) # 按价格从高到低排序 pizzas.sort(reverse=True, key=lambda x: x[0]) # 初始化dp数组 INF = float('-inf') dp = [ [INF] * 2 for _ in range(K+1) ] dp[0][0] = 0 # 初始状态:支付0元,无免费机会,美味度为0 for p, d in pizzas: # 创建临时dp数组,用于保存当前的状态 temp_dp = [row[:] for row in dp] for c in range(K+1): for b in [0, 1]: if temp_dp[c][b] == INF: continue # 选项二:购买当前披萨 if b == 0: new_c = c + p if new_c <= K: new_b = 1 new_d = temp_dp[c][b] + d if new_d > dp[new_c][new_b]: dp[new_c][new_b] = new_d # 选项三:免费拿当前披萨 if b == 1: new_c = c new_b = 0 new_d = temp_dp[c][b] + d if new_d > dp[new_c][new_b]: dp[new_c][new_b] = new_d # 找出最大值 max_d = 0 for c in range(K+1): for b in [0, 1]: if dp[c][b] > max_d: max_d = dp[c][b] print(max_d) if __name__ == "__main__": main()