#include <iostream>
#include <math.h>
#include <string>
#include <algorithm>
using namespace std;

#define INF 100000

int n, W;
int r[12];
double bitDP[12][(1<<12)]; // [??????????????£???] , [?????£?????±?????????bit??§??????]

bool inputData() {
	string str;
	getline(cin, str);
	if(cin.eof()) {
		return false;
	}
	
	str += ' ';
	
	int i, tmp = 0;
	for(i = 0; i < str.size(); i++) {
		if('0' <= str[i] && str[i] <= '9') {
			tmp  = tmp * 10 + str[i] - '0';
		} else {
			W = tmp;
			i++;
			break;
		}
	}
	
	n = tmp = 0;
	while(i < str.size()) {
		if('0' <= str[i] && str[i] <= '9') {
			tmp  = tmp * 10 + str[i] - '0';
		} else {
			r[n++] = tmp;
			tmp = 0;
		}
		
		i++;
	}
	
	return true;
}

int main()
{
	while(inputData()) {
		for(int i = 0; i < n; i++) {
			for(int bit = 0; bit < (1 << n); bit++) {
				bitDP[i][bit] = INF;
			}
			bitDP[i][(1 << i)] = (double)r[i];
		}
		
		for(int bit = 0; bit < (1 << n); bit++) {
			for(int i = 0; i < n ; i++) {
				for(int j = 0; j < n; j++) {
					if(bit& (1 << j)) {
						continue;
					}
					
					double distance_r = r[i] + r[j];
					double distance_y = (r[i] - r[j] >= 0)? r[i] - r[j]: r[j] - r[i];
					double cost = distance_r * cos(asin(distance_y / distance_r));
					bitDP[j][bit| (1 << j)] = min(bitDP[j][bit| (1 << j)], bitDP[i][bit] + cost);
				}
			}
		}
		/*
		for(int i = 0; i < n ; i++) {
			for(int bit = 0; bit < (1 << n); bit++) {
				if(bitDP[i][bit] == INF) cout << -1 << " ";
				else cout << bitDP[i][bit] << " ";
			}cout << endl;
		}*/
		
		double ans = INF;
		for(int i = 0; i < n; i++) {
			ans = min(ans, bitDP[i][(1 << n)-1] + (double)r[i]);
		}
		//cout << ans << " " << W << endl;
		cout << ((ans <= W)? "OK": "NA") << endl;
		
	}
	
	return 0;
}