#include <iostream>
#include <vector>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <algorithm>	// require sort next_permutation count __gcd reverse etc.
#include <cstdlib>	// require abs exit
#include <cstdio>	// require scanf printf
#include <functional>
#include <numeric>	// require accumulate
#include <cmath>
#include <climits>
#include <limits>
#include <cfloat>
#include <iomanip>	// require setw
#include <sstream>	// require stringstream 
#include <cstring>	// require memset
#include <cctype>	// require tolower, toupper
#include <fstream>	// require freopen
#include <ctime>
#define rep(i,n) for(int i=0;i<(n);i++)
#define ALL(A) A.begin(), A.end()
#define DEBUG 0
#define INF 1e100
#define EPS 1e-8
using namespace std;

typedef long long ll;
typedef pair<int, int> P;
string FILE_NAME = "testcase.0120_";
string NAME;
string itos (int n )
{
	stringstream ss;
	ss << n;

	return ss.str();
}
/*
	bitDP : dp[S][k]:= k 番目のケーキ (k &#8713; S )をつかった場合、距離が最小になる
		dp[S | k][k] = min (dp[S][j] + (j,k)の距離 ) (j ∈ S, k &#8713; S )
*/

double dp[1<<12][12];
vector<int> r;

double calc (int i, int j ){
	double res = (double)((r[i] + r[j] )*(r[i] + r[j] ) - (r[i] - r[j] )*(r[i] - r[j] ) );

	return sqrt (res );
} 

double dist[11][11];
// 3 〜 10 までの2つの円の距離を求めておく
void calc_dist (void ){
	memset (dist, 0., sizeof (dist ) );
	for (int i = 3 ;i <= 10; i++ ){
		for (int j = 3; j <= 10; j++ ){
			dist[i][j] = 2.*sqrt (i*j );
		} // end for
	} // end for
}

// 円 i, j の距離を求めておく
double d[12][12];
void calc_d (int n ){
	memset (d, 0., sizeof (d ) );
	rep (i, n ){
		rep (j, n ){
			d[i][j] = dist[r[i]][r[j]];
		} // end rep
	} // end rep
}	


int main()
{
//	cut here before submit 
#if DEBUG
	NAME = FILE_NAME;
	int CNT = 1;
	NAME += itos (CNT );
	while (freopen (NAME.c_str() , "r", stdin ) != NULL ) {
#endif
	ios_base::sync_with_stdio(0);
	string str = "";
	calc_dist ();
	int box;
	while (getline (cin, str ) ){
		memset (dp, 0., sizeof (dp ) );
		r.clear();
		stringstream ss (str );
		int in;
		ss >> box;
		while (ss >> in ) r.push_back (in );
	 	int n = r.size();
		calc_d (n );
		rep (i, 1<<n ) rep (j, n ) dp[i][j] = INF;
		rep (j, n ) dp[1<<j][j] = (double)r[j];
		rep (i, 1<<n ){
			rep (j, n ){
				if (dp[i][j] != INF ){
					rep (k, n ){
						if (k == j ) continue;
						if (i & (1<<k ) ) continue;
						dp[i | (1<<k)][k] = min (dp[i | (1<<k)][k], dp[i][j] + d[j][k] );
					} // end rep
				} // end if
			} // end rep
		} // end rep

		double res = INF;
		rep (j, n ) res = min (res, dp[(1<<n)-1][j] + (double)r[j] );

		if (res > (double)box ){
			cout << "NA" << endl;
		}else{
			cout << "OK" << endl;
		} // end if
	} // end while

#if DEBUG
	CNT++;	// cut here before submit
	NAME = FILE_NAME;
	NAME += itos (CNT );
	} // end loop; cut here before submit
#endif			
	return 0;
}