Problem:
上司のおごり

会津太郎さんの会社には、割り切れない事が大嫌いな上司がいます。太郎さんがその上司と食事に行くときは、割り勘で会計をしているのですが、支払金額が参加人数で割り切れないときは、いつも上司がおごってくれています。

ある日、太郎さんは食事会の幹事になりました。お金の少ない太郎さんは、その上司を誘ってなんとかおごってもらえるように出来ないか考えました。もう料理屋に注文をしなければならないのですが、まだ何人参加するかは分からないので、どんな人数が参加してもおごってもらえるような注文をしておきたいようです。太郎さんの同期で、同じく食事会に参加する予定のあなたは、太郎さんに協力して、予算額以下で最大のどんな人数でも割り切れない金額を算出することにしました。

料理の種類、各料理の料金、予算額を入力とし、予算額以下で最大のどんな数字でも割り切れない合計金額(ただし、 1 と合計金額は除く)を出力するプログラムを作成してください。なお、各種類の料理は複数個注文できますが、全種類の料理を注文する必要はありません。ただし、このような合計金額がない場合は、 NA と出力してください。

Input

複数のデータセットの並びが入力として与えられます。 入力の終わりはゼロふたつの行で示されます。
各データセットは以下の形式で与えられます。

n x
v1
v2
:
vn

1 行目に料理の種類 n (1 ≤ n ≤ 30) と予算額 x (1 ≤ x ≤ 1000000) が空白区切りで与えられます。続くn 行に i 種類目の料理の金額を表す整数 vi (1 ≤ vi ≤ 1000000) が与えられます。

データセットの数は 100 を超えません。

Output

入力データセットごとに、予算額に最も近い合計金額、または NA を１行に出力します。

Sample Input

4 15000
305
260
129
500
3 400
10
20
30
3 200909
5
9
12
0 0

Output for the Sample Input

14983
NA
200909

Solution in Ruby (judge verdict: Time Limit Exceeded)

Max = 1000000

Ps = Array.new(Max, true)
Ps[1] = false
2.upto(Max) do |j|
  if Ps[j]
    n = j * 2
    while n <= Max
      Ps[n] = false
      n += j
    end
  end
end


#すべての合計金額について、組み合わせがあるかどうか調べる
def createTable x, dish
  dp = Array.new(x + 1, false)
  dp[0] = true
  0.upto(x) do |sum|
    next if dp[sum] == false
    dish.each do |price|
      break if sum + price > x
      dp[sum + price] = true
    end
   end
  dp
end

#組み合わせから一番金額が大きいものを出力
def solve x, dp
  x.downto(0) do |sum|
    next unless Ps[sum]
    return sum if dp[sum]
  end
end

loop do
  n,x = $stdin.gets.chomp.split(" ").map(&:to_i)
  break if (n|x) == 0
  dish = Array.new
  n.times do
    dish << $stdin.gets.to_i
  end

  dp = createTable x,dish.sort!  
  ans = solve(x,dp)
  puts (ans == 0)? "NA" : ans 
end