#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <sstream>
#include <cmath>

using namespace std;
string str;
const int INF = 1 << 30;

double min(double a, double b) {
    return a > b ? b : a;
}
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
double dist(int a, int b) {
    return b + sqrt((a + b) * (a + b) - (a - b) * (a - b)) - a;
}

int main() {

    while(getline(cin, str)) {
        //begin input
        stringstream ss(str);
        int X;
        ss >> X;
        int radius[13];

        int i = 0;
        while(ss >> radius[i]) {
            i++;
        }
        int N = i;
        //end input
        
        vector<vector<double> > dp(1 << N, vector<double>(N, INF));
        for(int j = 0; j < N; j++) {
            dp[1 << j][j] = 2 * radius[j];
        }

        for(int i = 1; i < (1 << N); i++) {
            for(int j = 0; j < N; j++) {
                if((i >> j) & 1){
                    for(int k = 0; k < N; k++) {
                        if (!((i >> k) & 1)) {
                            //cout << i << " to " << (i | (1 << k)) << " : " << j << ", " << k << ", " << radius[j] << ", " << radius[k] << endl;
                            dp[i | (1 << k)][k] = min(dp[i | (1 << k)][k], dp[i][j] + dist(radius[j], radius[k]));
                        }
                    }
                }
            }
        }

        double mini = INF;
        for(int j = 0; j < N; j++) {
            mini = min(mini, dp[(1 << N) - 1][j]);
        }
        if (mini <= X) {
            //cout << mini << endl;
            cout << "OK" << endl;
        } else {
            //cout << mini << endl;
            cout << "NA" << endl;
        }

    }

    return 0;
}