#include <iostream>
#include <algorithm>

using namespace std;

int n;
int size[50];
bool now[50];
bool used[50];
bool f[50];
void u_fill(int, int, int);
void solve();
bool ans;
bool finish;

void u_fill(int pos, int rep, int moto){
   if(finish) return;
   if(rep == 0){
      now[moto] = false;
      solve();
      now[moto] = true;
      return;
   }
   for(;pos<n;pos++){
      if(finish) return;
      if(used[pos]) continue;
      if(now[pos]) continue;
      if(rep - size[pos] < 0) continue;
      used[pos] = true;
      now[pos] = true;
      u_fill(pos+1, rep-size[pos], moto);
      now[pos] = false;
      used[pos] = false;
   }
}

void solve(){
   if(finish) return;
   fill(f, f+50, false);
   bool tmp = true;
   bool first = true;
   for(int i=0;i<n;i++){
      f[i] = now[i];
      if(now[i]){
         first = false;
      }
      if(first && !used[i]){
         finish = true;
         return;
      }
      if(tmp) tmp = used[i];
   }
   if(tmp){
      ans = true;
      finish = true;
      return;
   }
   for(int i=0;i<n;i++){
      if(!f[i]) continue;
      u_fill(i+1, size[i], i);
   }
}

main(){
   while(cin >> n && n){
      fill(used, used+50, false);
      fill(now, now+50, false);
      for(int i=0;i<n;i++){
         cin >> size[i];
      }
      sort(size, size+n, greater<int>());
      used[0] = true;
      now[0] = true;
      ans = false;
      finish = false;
      solve();
      if(ans) cout << "YES" << endl;
      else cout << "NO" << endl;
   }
   return 0;
}