#include <bits/stdc++.h>
using namespace std;
int n, sz, Pow[30];
priority_queue<int, vector<int>, greater<int>> q;
map<int, bool> mp;
struct node {
  int n, count;
  node(int _n = 0, int _count = 0) { n = _n, count = _count; }
};
vector<node> v;
bool dfsq(int num);
bool dfs(int sum, int k, int num) {
  if (sum == 0) return dfsq(num);
  if (k == -1) return 0;
  int temp = min(v[k].count, sum / v[k].n);
  for (int i = temp; i >= 0; i--) {
    v[k].count -= i;
    if (dfs(sum - i * v[k].n, k - 1, num - i * Pow[k])) return 1;
    v[k].count += i;
  }
  return 0;
}
bool dfsq(int num) {
  if (q.empty()) return 1;
  if (mp.count(num)) return 0;
  mp[num] = 1;
  int t = q.top();
  q.pop();
  int i;
  for (i = sz - 1; i >= 0 && v[i].n + 1 >= t; i--)
    ;
  if (dfs(t - 1, i, num)) return 1;
  q.push(t);
  return 0;
}
int init() {
  int t[30];
  for (int i = 0; i < n; i++) cin >> t[i];
  sort(t, t + n);
  int count = 1;
  for (int i = 1; i < n; i++) {
    if (t[i] != 1) q.push(t[i]);
    if (t[i] == t[i - 1])
      count++;
    else {
      v.push_back(node(t[i - 1], count));
      count = 1;
    }
  }
  v.push_back(node(t[n - 1], count));
  sz = v.size();
  int num = v[sz - 1].count;
  for (int i = sz - 2; i >= 0; i--) {
    num *= (v[i].count + 1);
    num += v[i].count;
  }
  Pow[0] = 1;
  for (int i = 1; i < sz; i++) Pow[i] = Pow[i - 1] * (v[i].count + 1);
  return num;
}
bool zero() {
  for (int i = 0; i < sz - 1; i++)
    if (v[i].count) return 0;
  return 1;
}
int main() {
  cin >> n;
  int num = init();
  if (dfsq(num) && zero())
    cout << "YES" << endl;
  else
    cout << "NO" << endl;
  return 0;
}
