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 JAVA (judge verdict: Wrong Answer)

import java.util.Scanner;
import java.util.Arrays;

public class Main{
	Main(){
		Scanner sc = new Scanner(System.in);
		
		while(sc.hasNext()){
			String[] str = (sc.nextLine()).split(" ");
			double n = Double.parseDouble(str[0]), t;
			double[] rk = new double[str.length-1];
			double[] rk2 = new double[str.length];
			
			for(int i = 1; i < str.length; i++){
				rk[i-1] = Double.parseDouble(str[i]);
			}
			
			Arrays.sort(rk);
			boolean f = false;
			for(int i=0, j=rk.length-1; i <= j; i++, j--){
				rk2[2*i] = rk[i];
				rk2[2*i+1] = rk[j];
			}
			t = rk2[0]+rk2[rk.length-1];
			for(int i = 0; i < rk.length-1; i++){
				t += func(rk2[i], rk2[i+1]);
			}

			if(t <= n){
				f = true;
			}
			
			for(int i=0, j=rk.length-1; i <= j && !f; i++, j--){
				rk2[2*i] = rk[j];
				rk2[2*i+1] = rk[i];
			}
			t = rk2[0]+rk2	[rk.length-1];
			for(int i = 0; i < rk.length-1 && !f; i++){
				t += func(rk2[i], rk2[i+1]);
			}
			if(t <= n && !f){
				f = true;
			}
			
			if(f){
				System.out.println("OK");
			} else {
				System.out.println("NA");
			}
		}
	}
	
	double func(double s, double t){
		double u = s+t, v;
		if(s == t){
			return u;
		}
		if(s > t){
			v = s - t;
		} else {
			v = t - s;
		}
		
		return Math.sqrt(u*u-v*v);
	}
	
	public static void main(String[] args){
		new Main();
	}
}