n,w=gets.split.map(&:to_i)
items=n.times.map{gets.split.map(&:to_i)}.sort_by(&:first)
dp=Hash.new(0)
dp[0]=0
items.each{|iw,iv|
  update=[]
  dp.each{|k,v|
    next if iw+k>w
    update << [iw+k,iv+v] if dp[iw+k]<iv+v
  }
  update.each{|k,v|dp[k]=v}
}
puts dp.values.max