local mma = math.max
local n, t = io.read("*n", "*n")
local a, b = {}, {}
for i = 1, n do
  a[i], b[i] = io.read("*n", "*n")
end

local function solve()
  if t == 1 then
    local t1ret = b[1]
    for i = 2, n do
      t1ret = mma(t1ret, b[i])
    end
    return t1ret
  end
  local totret = 0
  local tail = {}
  for i = 1, n do
    tail[i] = {}
    for j = 1, t - 1 do
      tail[i][j] = 0
    end
  end
  local curmax = 0
  for i = n, 1, -1 do
    for j = 1, curmax do
      tail[i][j] = mma(tail[i][j], tail[i + 1][j])
      if j + a[i] < t then
        tail[i][j + a[i]] = mma(tail[i][j + a[i]], tail[i + 1][j] + b[i])
        curmax = mma(curmax, j + a[i])
      end
    end
    if a[i] < t then
      tail[i][a[i]] = mma(tail[i][a[i]], b[i])
      curmax = mma(curmax, a[i])
    end
  end
  local head = {}
  for i = 1, t - 1 do
    head[i] = 0
  end
  curmax = 0
  for i = 1, n - 1 do
    local headmax = {}
    headmax[1] = head[1]
    for j = 2, t - 1 do
      headmax[j] = mma(head[j], headmax[j - 1])
    end
    local tailmax = {}
    tailmax[1] = tail[i + 1][1]
    for j = 2, t - 1 do
      tailmax[j] = mma(tail[i + 1][j], tailmax[j - 1])
    end
    local iret = 0
    if 1 < t then iret = mma(headmax[t - 1], tailmax[t - 1]) end
    for j = 1, t - 2 do
      iret = mma(iret, headmax[j] + tailmax[t - 1 - j])
    end
    iret = iret + b[i]
    totret = mma(totret, iret)
    for j = t - 1 - a[i], 1, -1 do
      head[j + a[i]] = mma(head[j + a[i]], head[j] + b[i])
    end
    if a[i] < t then
      head[a[i]] = mma(head[a[i]], b[i])
    end
  end
  do -- i == n
    local headmax = {}
    headmax[1] = head[1]
    for j = 2, t - 1 do
      headmax[j] = mma(head[j], headmax[j - 1])
    end
    local iret = 1 < t and headmax[t - 1] or 0
    iret = iret + b[n]
    totret = mma(totret, iret)
  end
  return totret
end
print(solve())
