#include <bits/stdc++.h>

using namespace std;

double RofCake[12];
double Dp[4096][12];

const double INF = DBL_MAX;

unsigned popcnt(unsigned u)
{
	unsigned ret = 0;
	while (u)
	{
		u = (u & (u - 1));
		ret++;
	}
	return ret;
}

double getDistance(double r1, double r2)
{
	return sqrt(pow(r1 + r2, 2) - pow(r1 - r2, 2));
}

double solve(int index) {
	int next;
	double ans;

	for (int i = 0; i < (1<<index); i++) {
		for (int j = 0; j < index; j++) {
			for (int k = 0; k < index; k++) {
				next = i | (1 << j);
				if (i == 0) {
					Dp[next][j] = min( Dp[next][j], RofCake[j]);
					continue;
				}
				if (Dp[i][k] == INF) {
					continue;
				}

				if (popcnt(next) == index) {
					Dp[next][j] = min(Dp[next][j], Dp[i][k] + getDistance(RofCake[k], RofCake[j]) + RofCake[j]);
				}
				else {
					Dp[next][j] = min(Dp[next][j], Dp[i][k]+getDistance(RofCake[k],RofCake[j]));
				}
			}
		}
	}

	ans = INF;
	for (int i = 0; i < index; i++) {
		ans = min(ans, Dp[(1 << index) - 1][i]);
	}

	return ans;
}


int main() {
	int w, index;
	string str;
	stringstream ss;
	double ans;

	while (getline(cin,str)) {
		ss << str;
		ss >> w;
		index = 0;
		memset(RofCake, 0, sizeof(RofCake));
		while (ss >> RofCake[index]) {
			//cout<<RofCake[index]<<ends;
			index++;
		}
		//cout << index << endl;
		for (int i = 0; i < (1 << index); i++) {
			for (int j = 0; j < index; j++) {
				Dp[i][j] = INF;
			}
		}

		ans = solve(index);

		if (ans > w) {
			cout << "NA" << endl;
		}
		else {
			cout << "OK" << endl;
		}

		str = "";
		ss.clear();
	}
	

	return 0;
}
