#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <cctype>
using namespace std;

#define rep(i,n) for(int (i)=0; (i)<(int)(n); ++(i))
#define foreach(c,i) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)

template <class Itr>
Itr get_adv_itr(Itr _itr, int n) {
  Itr itr(_itr);
  advance(itr, n);
  return itr;
}

string in;
int L, temp, N;

int main() {
  while (getline(cin, in)) {
    istringstream is(in);
    is >> L;
    vector<int> cakes;
    while (is >> temp) cakes.push_back(temp);
    N = cakes.size();
    string ans = "NA";

    rep(i,N) {
      vector<int> cp_cakes(cakes);
      double cost = cp_cakes[i];
      cp_cakes.erase(get_adv_itr(cp_cakes.begin(),i));
      int last = (int)cost;
      while (cp_cakes.size()) {
        vector<int> dists;
        for (int j = 0; j < cp_cakes.size(); ++j)
          dists.push_back(pow(last - cp_cakes[j],2));
        int id = distance(dists.begin(),
                          max_element(dists.begin(), dists.end()));
        // cost += sqrt(pow(last + cp_cakes[id],2) - pow(last - cp_cakes[id],2));
        cost += 2 * sqrt(last * cp_cakes[id]);
        last = cp_cakes[id];
        cp_cakes.erase(get_adv_itr(cp_cakes.begin(), id));
      }
      cost += last;
      if (L >= cost) {
        ans = "OK";
        break;
      }
    }
    cout << ans << endl;
  }
  return 0;
}