n, k = read_line.split.map(&.to_i) p, d = (1..n).map { read_line.split.map(&.to_i) }.sort.reverse.transpose I = -10**9 dp = [{0, I}] + [{I, I}] * k n.times { |i| dp = (0..k).map { |j| { {dp[j][0], dp[j][1] + d[i]}.max, {dp[j][1], j >= p[i] ? dp[j - p[i]][0] + d[i] : I}.max } } } puts dp.max_of(&.max)