Problem:
パティシエ

ケーキ屋さんが、まちまちな大きさのロールケーキをたくさん作りました。あなたは、このケーキを箱に並べる仕事を任されました。

ロールケーキはとてもやわらかいので、他のロールケーキが上に乗るとつぶれてしまいます。ですから、図(a) のように全てのロールケーキは必ず箱の底面に接しているように並べなければなりません。並べ替えると必要な幅も変わります。

図(a)

図(b)

n 個のロールケーキの半径 r1, r2, ..., rn と箱の長さを読み込み、それぞれについて、箱の中にうまく収まるかどうか判定し、並べる順番を工夫すると箱に入る場合は "OK"、どう並べても入らない場合には "NA"を出力するプログラムを作成してください。

ロールケーキの断面は円であり、箱の壁の高さは十分に高いものとします。 ただし、ロールケーキの半径は 3 以上 10 以下の整数とします。つまり、ケーキの半径に極端な差はなく、図(b) のように大きなケーキの間に小さなケーキがはまり込んでしまうことはありません。

Input

入力は複数のデータセットからなります。各データセットは以下の形式で与えられます。

W r1 r2 ... rn

最初に箱の長さを表す整数 W (1 ≤ W ≤ 1,000) が与えられます。 続いて、空白区切りで各ロールケーキの半径を表す整数 ri (3 ≤ ri ≤ 10) が与えられます。ケーキの個数 n は 12 以下です。

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

Output

データセットごとに OK または NA を１行に出力してください。

Sample Input

30 4 5 6
30 5 5 5
50 3 3 3 10 10
49 3 3 3 10 10

Output for the Sample Input

OK
OK
OK
NA

Solution in Ruby (judge verdict: Accepted)

while (line = gets)
  rs = line.chomp.split(" ").map{|s| s.to_f}

  bl = rs.shift
  m = rs.length
  rs.sort!

  r0 = r1 = rs.shift
  nums = [r0]

  while ! rs.empty?
    rlen = rs.length
    max_diff0 = max_diff1 = 0.0
    max_i0 = max_i1 = 0

    for i in (0...rlen)
      diff0 = (r0 - rs[i]).abs
      if max_diff0 < diff0
        max_diff0 = diff0
        max_i0 = i
      end

      diff1 = (r1 - rs[i]).abs
      if max_diff1 < diff1
        max_diff1 = diff1
        max_i1 = i
      end
    end

    if max_diff0 > max_diff1 ||
        max_diff0 == max_diff1 && r0 + rs[max_i0] <= r1 + rs[max_i1]
      r0 = rs.delete_at(max_i0)
      nums.unshift r0
    else
      r1 = rs.delete_at(max_i1)
      nums.push r1
    end
  end

  l = nums[0] + nums[m - 1]
  for i in (1...m)
    rp = nums[i - 1] + nums[i]
    rm = nums[i - 1] - nums[i]
    l += Math.sqrt(rp * rp - rm * rm)
  end

  puts (bl >= l) ? "OK" : "NA"
end