#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES

#include <stdio.h>
#include <ctype.h>
#include <string>
#include <iostream>
#include <vector>
#include <stack>
#include <fstream>
#include <sstream>
#include <queue>
#include <exception>
#include <cmath>
#include <numeric>
#include <map>
#include <algorithm>

#define INF 100000000
#define MAX_N 12

using namespace std;
typedef long long int lint;

double dp[MAX_N][1 << MAX_N];
double d[MAX_N][MAX_N];
double rad[MAX_N];

//S : ???????????±???????????????, i : ?????????????????±??????
double rec(int S, int i, int n) {
	if (dp[i][S] < INF) return dp[i][S];

	double r = 0;

	//1????????????
	if (S == (1 << i)) {
		return dp[i][S] = rad[i];
	}

	//??¨????????????
	if (S == (1 << n) - 1) {
		r = rad[i];
	}

	double res = INF;
	//S ?????? i ??????????????????
	int SS = S ^ (1 << i);
	for (int j = 0; j < n; j++) {
		if ((SS >> j) & 1) {
			res = min(res, rec(SS, j, n) + d[j][i] + r);
		}
	}

	return dp[i][S] = res;
}

void init(int n) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < (1 << n); j++) {
			dp[i][j] = INF + 1;
		}
	}
}

bool AOJ0120()
{
	string str;
	if (!getline(cin, str)) return false;

	istringstream iss(str);
	
	int width;
	vector<int> radii;

	iss >> width;
	int radius;
	while (iss >> radius) {
		radii.push_back(radius);
	}

	int n = radii.size();

	//init
	init(n);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			d[i][j] = sqrt(radii[i] * radii[j]) * 2;
		}
		rad[i] = radii[i];
	}

	double ans = INF + 1;
	for (int i = 0; i < n; i++) {
		ans = min(ans, rec((1 << n) - 1, i, n));
	}

	if (ans < width + 1e-8) cout << "OK" << endl;
	else cout << "NA" << endl;
	
	return true;
}

int main()
{
	while (AOJ0120()) {

	}
	return 0;
}