#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <sstream>
#include <cmath>
#include <climits>
#include <set>
#include <iostream>
#include <map>
#include <functional>
#include <cstdlib>
#include <numeric>
#include <queue>

using namespace std;

#define reps(i,f,n) for(int i=f; i<int(n); ++i)
#define rep(i,n) reps(i,0,n)

typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> pii;

int n;
int C[50];
bool used[50];
bool full[50];

bool searchFrom();

bool searchTo(int v, int src)
{
	reps(i, src+1, n){
		if(!used[i]){
			full[i] = used[i] = true;
			if(C[i] == v){
				if(searchFrom())
					return true;
			}
			else if(C[i] < v && searchTo(v-C[i], i))
				return true;
			full[i] = used[i] = false;
		}
	}
	
	return false;
}

bool searchFrom()
{
	int unused = -1;
	rep(i, n){
		if(!used[i]){
			unused = i;
			break;
		}
	}
	if(unused == -1)
		return true;
	
	rep(i, unused){
		if(full[i]){
			full[i] = false;
			if(searchTo(C[i], i))
				return true;
			full[i] = true;
		}
	}
	return false;
}

int main()
{
	while(scanf("%d", &n), n){
		rep(i, n)
			scanf("%d", &C[i]);
		
		rep(i, 101)
			visited[i].clear();
		sort(C, C+n, greater<int>());
		fill(used, used+n, false);
		fill(full, full+n, false);
		used[0] = full[0] = true;
		puts(searchFrom() ? "YES" : "NO");
	}
	return 0;
}