local mmi, mma = math.min, math.max
local m, n = io.read("*n", "*n")
local t = {}
for i = 1, m do
  t[i] = {io.read("*n", "*n")}
end
table.sort(t, function(a, b) return a[1] > b[1] end)
local z = {}
for i = 1, n + 1 do
  z[i] = 0
end
local ret = 0LL
for i = 1, m do
  local v, w = t[i][1], t[i][2]
  for j = n + 1 - w, 1, -1 do
    z[j + w] = mma(z[j + w], z[j] + v)
  end
  local cand = 1LL * z[n + 1] * v
  if ret < cand then ret = cand end
end
ret = tostring(ret):gsub("LL", "")
print(ret)