# coding: utf-8
# http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DPL_1_B&lang=jp "Combinatorial - 0-1 Knapsack Problem"
#
# 30????????????
#

n, w = gets.split(" ").map(&:to_i)
goods = Array.new(n+1)
for i in 1..n
  goods[i] = gets.split(" ").map(&:to_i)
end

max = 0

v = Array.new(n+1)
for j in 0..n
  v[j] = Array.new(w+1,0)
end

#v = Array.new(n+1,Array.new(w+1))
#p v
#for i in 1..n
#  v[i][0] = 0
#end
#p v
#for c in 1..w
#  v[0][c] = 0
#end
#p v
#v[0][0] = 0

for i in 1..n
  for c in 1..w
    if c - goods[i][1] < 0
      v[i][c] = v[i-1][c]
    else
      v[i][c] = [v[i-1][c], v[i-1][c-goods[i][1]]+goods[i][0]].max
    end
    #p v
    max = [max, v[i][c]].max
  end
end

puts max