#include <iostream>
#include <vector>
#include <algorithm>
#include <time.h>
#include <cstdio>
using namespace std;
clock_t start, endd;


vector<int> v;
int dn[100]={};
int dfs(int x,int r){
	endd=clock();
	if( (double)(endd - start) > 0.01 * CLOCKS_PER_SEC ){
		return 0;
	}
	if( !dn[x] ) return 0;
	if( r < 0 ) return 0;
	if( r == 0 ){
		return dfs(x+1,v[x+1]);
	}
	if( x == v.size()-1 ) return r != 0;
	if( r == v[x] ){
		if( dfs(x+1,v[x+1]) ) return 1;
	}
	
	long long can[2] = {} , tmp[2] = {};
	can[0] |= 1;
	
	// branch-cutting
	for(int i = x + 1 ; i < v.size() ; i++){
		if( !dn[i] ){
			if( v[x] < 64 ){
				tmp[0] = can[0] << v[x];
				tmp[1] = (can[0] >> (64-v[x])) | (can[1] << v[x]);
			}else{
				tmp[0] = 0;
				tmp[1] = can[0] << (v[x]-64);
			}
			can[0] |= tmp[0];
			can[1] |= tmp[1];
		}
	}
	if( !(can[v[x]/64]>>(v[x]%64)&1) ){
		return 0;	
	}
	
	
	for(int i = x + 1 ; i < v.size() ; i++){
		if( dn[i] == 0 ){
			dn[i] = 1;
			if( dfs(x,r-v[i]) ) return 1;
			dn[i] = 0;
		}
	}
	return 0;
	
}
int main(){
	int n;
	while(cin >> n && n){
		v.resize(n);
		for(int i = 0 ; i < n ; i++) dn[i] = 0;
		//for(int i = 0 ; i < n ; i++) v[i] = rand() % 100 + 1;
		
		for(int i = 0 ; i < n ; i++) cin >> v[i];
		
		sort(v.rbegin(),v.rend());
	
		dn[0] = 1;
		start=clock();
		cout << (dfs(0,v[0])?"YES":"NO") << endl;
		dn[1] = 0;
	}
}