N, W = gets.split.map(&:to_i)
WV = N.times.map { gets.split.map(&:to_i) }

dp = Array.new(W + 1, 0)

N.times do |n|
  w, v = WV[n]
  W.downto(w) do |w_lim|
    cur_v = dp[w_lim - w] + v
    dp[w_lim] = cur_v if cur_v > dp[w_lim]
  end
end

puts dp[W]
