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

#define rep(i,n) for(int i=0; i<(n); i++)

using namespace std;

double dp[1<<12][12][12];
const double eps = 1e-8;

int main() {
    string line;
    while(getline(cin, line)) {
        stringstream ss;
        double width;
        vector<double> cake;
        int tmp;
        ss << line;
        ss >> width;
        while(ss >> tmp) {
            cake.push_back(tmp);
        }
        const int n = cake.size();

        rep(i,1<<n) {
            rep(j,n) {
                rep(k,n) {
                    dp[i][j][k] = 1000;
                }
            }
        }
        for (int i = 0; i < n; i++) {
            dp[1<<i][i][i] = 2 * cake[i];
        }
        for (int i = 1; i < (1 << n) - 1; i++) {
            rep(j, n) {
                if (!(i & (1 << j)))continue;
                rep(k, n) {
                    if (!(i & (1 << k)))continue;
                    rep(l, n) {
                        if (i & (1 << l))continue;
                        //cout << i << "," << j << "," << k << "," << l << endl;
                        double d = abs(cake[l] - cake[j]);
                        double dif = cos(asin(d / (cake[l]+cake[j]))) * (cake[l] + cake[j]) - cake[j] + cake[l];

                        dp[i | (1 << l)][l][k] = min(dp[i | (1 << l)][l][k], dp[i][j][k] + dif);
                        d = abs(cake[l] - cake[k]);
                        dif = cos(asin(d / (cake[l]+cake[k]))) * (cake[l] + cake[k]) - cake[k] + cake[l];
                        dp[i | (1 << l)][j][l] = min(dp[i | (1 << l)][j][l], dp[i][j][k] + dif);
                    }
                }
            }
        }
        double ans = 1000;
        rep(i,n)rep(j,n) {
            ans = min(ans, dp[(1 << n) - 1][i][j]);
        }
        cout << (width - ans + eps > 0 ? "OK" : "NA") << endl;
    }
}