N, M = gets.split.map(&:to_i)
J = N.times.map { gets.split.map(&:to_i) }
J.sort_by! { |v, w| -v }

dp = Array.new(M + 1, 0)
dp2 = Array.new(M + 1, 0)

J.each do |v, w|
  (M - w).downto(0) do |i|
    nw = i + w

    if dp[nw] < (dp2[i] + v) * v
      dp[nw] = (dp2[i] + v) * v
      dp2[nw] = dp2[i] + v
    end
  end
end

puts dp.max