Problem:
泥棒

宝物がたくさん収蔵されている博物館に、泥棒が大きな風呂敷を一つだけ持って忍び込みました。盗み出したいものはたくさんありますが、風呂敷が耐えられる重さが限られており、これを超えると風呂敷が破れてしまいます。そこで泥棒は、用意した風呂敷を破らず且つ最も価値が高くなるようなお宝の組み合わせを考えなくてはなりません。

風呂敷が耐えられる重さ W、および博物館にある個々のお宝の価値と重さを読み込んで、重さの総和が W を超えない範囲で価値の総和が最大になるときの、お宝の価値総和と重さの総和を出力するプログラムを作成してください。ただし、価値の総和が最大になる組み合わせが複数あるときは、重さの総和が小さいものを出力することとします。

Input

複数のデータセットが与えられます。各データセットは以下のような形式で与えられます。

W
N
v1,w1
v2,w2
:
vN,wN

１行目に風呂敷の耐えられる重さを表す整数 W (W ≤ 1,000)、２行目にお宝の数 N (1 ≤ N ≤ 1,000) が与えられます。続く N 行に i 番目のお宝の価値を表す整数 vi (0 ≤ vi ≤ 10,000) とその重さを表す整数 wi (0 ≤ wi ≤ W) の組がそれぞれ１行に与えられます。

W が 0 のとき入力の最後とします。データセットの数は 50 を超えません。

Output

各データセットに対して以下のように出力して下さい。

Case データセットの番号:
風呂敷に入れたお宝の価値総和
そのときのお宝の重さの総和

Sample Input

50
5
60,10
100,20
120,30
210,45
10,4
50
5
60,10
100,20
120,30
210,45
10,4
0

Output for the Sample Input

Case 1:
220
49
Case 2:
220
49

Solution in Ruby (judge verdict: Wrong Answer)


ans = []
index = 0
while true
  v = gets.to_i
  break if v.zero?
  index += 1
  count = gets.to_i
  arr_v = []; arr_w = []

  count.times do |i|
    value, key = gets.split(",").map(&:to_i)
    arr_v << value
    arr_w << key
  end

  max_key = 0
  max_value = 0

  dp = Hash.new
  dp[0] = 0

  count.times do |ind|
    dp_tmp = dp.clone

    dp.each do |key, value|
      total_key = key + arr_v[ind]
      total_value = value + arr_w[ind]

      if !dp_tmp.has_key?(total_key)
        dp_tmp[total_key] = total_value
      elsif dp_tmp.has_key?(total_key) && total_value <= dp_tmp[total_key]
        dp_tmp[total_key] = total_value
      end

      if v >= total_value && total_key > max_value
        max_key = total_key
        max_value = total_value
      end
    end

    dp = dp_tmp
  end
  ans << [ "Case #{index}:", max_key, max_value ]
end

ans.each do |arr|
  arr.each do |val|
    puts val
  end
end