#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;

double dist[11][11];
string input;
int len, r;
vector<int> v;

void prepare() {
    int a, b, n = v.size();
    for (int i=0; i<n; ++i) {
        for (int j=0; j<n; ++j) {
            a = v[i];
            b = v[j];
            dist[a][b] = sqrt(pow(b + a, 2) - pow(b - a, 2));
            dist[b][a] = dist[a][b];
        }
    }
}

double getWidth(vector<int> &v1, vector<int> &v2) {
    int n = v1.size();
    int m = v2.size();
    double sum = v1[0] + (n == m ? v2[m-1] : v1[n-1]);
    for (int i=0; i<n; ++i) {
        if (i < n && i < m) sum += dist[v1[i]][v2[i]];
        if (i+1 < n && i < m) sum += dist[v2[i]][v1[i+1]];
    }
    return sum;
}

bool solve(vector<int> v1, vector<int> v2) {
    if (v1.size() < v2.size()) swap(v1, v2);
    do {
        sort(v2.begin(), v2.end());
        do {
            if (getWidth(v1, v2) < len + 1e-6) {
                return true;
            }
        } while (next_permutation(v2.begin(), v2.end()));
    } while (next_permutation(v1.begin(), v1.end()));
    return false;
}

int main() {
    while (getline(cin, input)) {
        stringstream ss(input);
        ss >> len;
        v.clear();
        while (ss >> r) {
            v.push_back(r);
        }
        sort(v.begin(), v.end());
        prepare();
        int siz = v.size();
        int n = siz / 2 + (siz % 2);
        int m = siz / 2;
        bool ok = solve(vector<int>(v.begin(), v.begin() + n),
                        vector<int>(v.end() - m, v.end()));
        if ( ! ok) {
            ok |= solve(vector<int>(v.end() - n, v.end()),
                        vector<int>(v.begin(), v.begin() + m));
        }
        cout << (ok ? "OK" : "NA") << endl;
    }
    return 0;
}