#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>

using namespace std;

#define INF 1 << 24

int d(int n) {
	return n * n;
}

typedef pair< vector<bool>, pair<int, double> > P;

int main() {
	int L;
	while ( scanf("%d", &L) != EOF ) {
		vector<int> v;

		char c;
		while ( c = getchar(), c != '\n' && c != '\r' && c != EOF ) {
			int a; scanf("%d", &a);
			v.push_back(a);
		}

/*
		sort( v.begin(), v.end() );

		int n = v.size();
		vector<int> v1, v2;
		for (int i = 0; i < n/2; ++i)
			v1.push_back(v[i]);

		for (int i = n/2; i < n; ++i)
			v2.push_back(v[i]);
*/

		int n = v.size();
		vector< vector<double> > len(n, vector<double>(n, INF));
		for (int i = 0; i < n; ++i)
			for (int j = 0; j < n; ++j)
				len[i][j] = sqrt( d(v[i]+v[j]) - d( abs(v[i]-v[j]) ) );

		queue<P> Q;
		for (int i = 0; i < n; ++i) {
			vector<bool> V(n); V[i] = true;
			Q.push( P( V, make_pair(i, v[i]) ) );
		}

		double ans = INF;
		double cost[12][12]; fill(&cost[0][0], &cost[0][0]+12*12, INF);
		while ( !Q.empty() ) {
			P p = Q.front(); Q.pop();
			int head = p.second.first;
			double length = p.second.second;

			int sz = 0;
			for (int i = 0; i < n; ++i)
				sz += p.first[i];

			if (sz >= n) {
				if (length + v[head] < ans)
					ans = length + v[head];

				continue;
			}

			for (int i = 0; i < n; ++i) {
				if (p.first[i]) continue;

				vector<bool> v2 = p.first; v2[i] = true;
				Q.push( P(v2, make_pair(i, length + len[head][i])) );
			}
		}

		if (ans <= L) cout << "OK" << endl;
		else cout << "NA" << endl;


	}
}