#include "bits/stdc++.h"
#define REP(i,s,n) for(int i=s;i<n;i++)
#define rep(i,n) REP(i,0,n)
#define inf (1<<29)
#define EPS (1e-10)
#define COUNTER_CLOCKWISE 1
#define CLOCKWISE -1
#define ONLINE_BACK 2
#define ONLINE_FRONT -2
#define ON_SEGMENT 0
#define equals(a,b) (fabs((a)-(b)) < EPS)

using namespace std;


double L;

void split(string s,vector<double> &vec)
{
  stringstream ss;
  ss << s;
  for(int i=0;!(ss >> s).fail();i++)
    {
      if(i == 0)L = (atoi)(s.c_str());
      else
	{
	  vec.push_back((atoi)(s.c_str()));
	}
    }

}

int n;
double dp[(1<<12)][12];

double getDistance(double r1,double r2)
{
  return sqrt(pow(r1+r2,2)-pow(r1-r2,2));
}

int main()
{

  string line;
  while(getline(cin,line))
    {
      vector<double> vec;
      split(line,vec);
      n = vec.size();
      rep(i,(1<<n))rep(j,n)dp[i][j] = inf;

      rep(i,(1<<n))//???????????§????????????????????¶???
	{
	  rep(j,n)//?¬??????????????????????????????????????????????
	    {
	      rep(k,n)//???????????????????????????????????????
		{
		  if(i == 0)//?????????????????????????????????????????????????????????????????????
		    {
		      dp[i|(1<<j)][j] = min(dp[i|(1<<j)][j],vec[j]);
		      continue;
		    }

		  if(dp[i][k] == inf)continue;
		  int next = i|(1<<j);

		  if(__builtin_popcount(next) == n)//????????????????????§?????¨???????????¢+??????????????????????????????
		    {
		      dp[next][j] = min(dp[next][j],
					dp[i][k]+getDistance(vec[k],vec[j])+vec[j]);
		    }
		  else
		    {
		      dp[next][j] = min(dp[next][j],
					dp[i][k]+getDistance(vec[k],vec[j]));
		    }
		}
	    }
	}

      double ans = inf;
      rep(i,n)ans = min(ans,dp[(1<<n)-1][i]);
      if(equals(ans,L) || (!equals(ans,L) && ans < L))cout << "OK" << endl;
      else        cout << "NA" << endl;
    }
  return 0;
}