#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;

#define FREE 0
#define TRIED 1
#define LOCKED 2
#define DONE 3
//0182
int main(){
	int n,x;

	while(cin >> n, n){
		vector<int> v1;
		int capacity=0;
		char used[10]={0}; //0:free 1:tried 2:locked 3:done
		//char *used = new char[n];

		for(int i=0; i<n; ++i){
			cin >> x;
			capacity+=x;
			v1.push_back(x);
		}
		sort(v1.begin(),v1.end(), greater<int>());

		//int target=v1[0];
		used[0]=LOCKED;
		//capacity-=v1[0];
		int temp_capacity = capacity;
		bool isCancel=true;
		bool isComplete=true;
		for(int i=0; i<n; ++i){
			if(used[i]!=LOCKED){
				continue;
			}
			if(n==1){
				used[0]=DONE;
				break;
			}

			int temp_target=v1[i];
			for(int i=0; i<n; ++i){
				if(used[i]!=FREE){
					continue;
				}
				if(temp_target>=v1[i]){
					used[i]=TRIED;
					capacity-=v1[i];
					temp_target-=v1[i];
					temp_capacity-=v1[i];
				}	
			}
			if(temp_target==0){
				isCancel = false;
			}
			
			for(int i=0; i<n; ++i){
				if(isCancel){
					if(used[i]==TRIED){
						used[i]=FREE;
						temp_capacity+=v1[i];
					}
				}else{
					if(used[i]==LOCKED){
						used[i]=DONE;
					}
					if(used[i]==TRIED){
						used[i]=LOCKED;
					}
				}
			}
		}

		for(int i=0; i<n; ++i){
			if(used[i]!=DONE)
				isComplete=false;
		}
		cout << (isComplete ? "YES" : "NO") << endl;
	}

	return 0;
}