N = gets.to_i VA, WA = N.times.map{ gets.split.take(2).map(&:to_i)}.sort.transpose V = gets.to_i $dp = [0]*(WA.sum+1) N.times{|i| (WA.sum).downto(WA[i]){|ii| $dp[ii] = [$dp[ii], $dp[ii - WA[i]] + VA[i]].max } } # p $dp min = $dp.bsearch_index{|v|v>=V} max = $dp.bsearch_index{|v|v>V} puts [min, 1].max puts max.nil? ? :inf : max-1