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

int n;
vector<int> beakers;

inline void generate(const int idx, const long long used, const int rest, vector<long long>& next) {
	if(rest == 0) {
		next.push_back(used);
		return;
	}

	if(idx >= n)
		return;

	generate(idx + 1, used, rest, next);
	if(rest >= beakers[idx] && !((used >> idx) & 1))
		generate(idx + 1, used | 1ll << idx, rest - beakers[idx], next);

	return;
}

inline bool dfs(const int idx = 0, const long long used = 1) {
	if(idx == n - 1)
		return used == (1ll << n) - 1;

	if(!((used >> idx) & 1))
		return false;

	vector<long long> next;
	if((used >> idx + 1) & 1) {
		next.push_back(used);
		generate(idx + 2, used, beakers[idx], next);
	}
	else {
		generate(idx + 2, used | (1ll << idx + 1), beakers[idx] - beakers[idx + 1], next);
	}

	for(int i = 0; i < next.size(); ++i)
		if(dfs(idx + 1, next[i]))
			return true;

	return false;
}

int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);

	while(cin >> n, n) {
		beakers.clear();
		beakers.resize(n);
		for(int i = 0; i < n; ++i)
			cin >> beakers[i];

		sort(beakers.begin(), beakers.end(), greater<int>());
		cout << (dfs() ? "YES" : "NO")  << endl;
	}

	return EXIT_SUCCESS;
}