#include <iostream>
#include <complex>
#include <sstream>
#include <string>
#include <algorithm>
#include <deque>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <vector>
#include <set>
#include <limits>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
#define REP(i, j) for(int i = 0; i < (int)(j); ++i)
#define FOR(i, j, k) for(int i = (int)(j); i < (int)(k); ++i)
#define SORT(v) sort((v).begin(), (v).end())
#define REVERSE(v) reverse((v).begin(), (v).end())
typedef complex<double> P;
const double INF = 1e9;

int N, L;
vector<int> v;

void input(string &str, char delim){
  stringstream ss(str);
  string tmp;
  bool f = true;
  while(getline(ss, tmp, delim)){
    if(f) { L = atoi(tmp.c_str()); f = false; }
    else v.push_back(atoi(tmp.c_str()));
  }
  N = v.size();
}

int main() {
  string s;
  while(getline(cin, s)){
    v = vector<int>();
    input(s, ' ');
    vector< vector<double> > dp((1 << N), vector<double>(N, INF));
    REP(i, N) dp[(1 << i)][i] = v[i];
    REP(bit, (1 << N)){
      REP(bef, N){
        if(dp[bit][bef] == INF) continue;
        //cout <<bitset<3>(bit).to_string() <<", " <<bef <<" = " <<dp[bit][bef] <<endl;
        REP(n, N){
          if(1 & (bit >> n)) continue;
          int nb = bit | (1 << n);
          double l = sqrt((v[bef] + v[n]) * (v[bef] + v[n]) - (v[bef] - v[n]) * (v[bef] - v[n]));
          if(nb == (1 << N) - 1) l += v[n];
          //cout <<"    " <<bitset<3>(nb).to_string() <<", " <<n <<" = min(" <<dp[nb][n] <<", " <<dp[bit][bef] <<" + " <<l <<")" <<endl;
          dp[nb][n] = min(dp[nb][n], dp[bit][bef] + l);
        }
      }
    }
    double len = INF;
    REP(i, N) len = min(len, dp[(1 << N) - 1][i]);
    cout <<(len <= L ? "OK" : "NA") <<endl;
  }
  return 0;
}