#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<string>
#include<iostream>
#include<cmath>
#include<map>
#include<set>
#include<climits>
#include<ctime>
#include<complex>
#include<sstream>
#include<cstring>
using namespace std;
typedef vector<string>vs;
typedef vector<int>vi;
typedef vector<vi>vvi;
typedef vector<double>vd;
typedef pair<int,int>pii;
typedef long long ll;
typedef pair<ll,ll>pll;
typedef vector<ll>vl;
#define rrep(i,x,n) for(int i=(x);i<(n);++i)
#define rep(i,x) rrep(i,0,(x))
#define fi first
#define se second
#define each(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();++i)
#define all(c) (c).begin(),(c).end()
#define rall(c) (c).rbegin(),(c).rend()
#define pb push_back
#define maxs(a,b) (a)=max(a,b)
#define mins(a,b) (a)=min(a,b)

const double INF=114514;
const double EPS=1e-8;
int main(){
    string str;
    while(getline(cin,str)){
        stringstream ss(str);
        int W;ss>>W;
        vi r;int val;
        while(ss>>val){
            r.pb(val);
        }
        int N=r.size();
        double dist[20][20]={{0}};
        rep(i,N)dist[0][i+1]=r[i];
        rep(i,N)rep(j,N){
            dist[i+1][j+1]=sqrt((r[i]+r[j])*(r[i]+r[j])-(r[i]-r[j])*(r[i]-r[j]));
        }

        double dp[1<<12][13];
        rep(i,(1<<N))rep(j,13)dp[i][j]=INF;
        dp[0][0]=0;

        rep(i,(1<<N)){
            rep(j,N+1){

                rep(k,N){
                    if((i>>k)&1)continue;
                    dp[i|(1<<k)][k+1]=min(dp[i|(1<<k)][k+1],dp[i][j]+dist[j][k+1]);
                }
            }
        }

        double mi=INF;
        rep(i,N)mi=min(mi,dp[(1<<N)-1][i+1]+r[i]);

        if(mi>W+EPS)puts("NA");
        else puts("OK");

    }
    return 0;
}