Iahub and Iahubina went to a picnic in a forest full of trees. Less than 5 minutes passed before Iahub remembered of trees from programming. Moreover, he invented a new problem and Iahubina has to solve it, otherwise Iahub won't give her the food. 

Iahub asks Iahubina: can you build a rooted tree, such that

  * each internal node (a node with at least one son) has at least two sons; 
  * node i has ci nodes in its subtree? 



Iahubina has to guess the tree. Being a smart girl, she realized that it's possible no tree can follow Iahub's restrictions. In this way, Iahub will eat all the food. You need to help Iahubina: determine if there's at least one tree following Iahub's restrictions. The required tree must contain n nodes.

Input

The first line of the input contains integer n (1 ≤ n ≤ 24). Next line contains n positive integers: the i-th number represents ci (1 ≤ ci ≤ n).

Output

Output on the first line "YES" (without quotes) if there exist at least one tree following Iahub's restrictions, otherwise output "NO" (without quotes). 

Examples

Input

4
1 1 1 4


Output

YES

Input

5
1 1 5 2 1


Output

NO
#include <bits/stdc++.h>
using namespace std;
const int N = 25;
int n, m, tmp, leaf;
vector<int> c, d, par, child[N];
bool dfs(int v) {
  int x = 0;
  d[v] = 1;
  for (auto u : child[v]) {
    if (!dfs(u)) return 0;
    d[v] += d[u];
    ++x;
  }
  if (d[v] > c[v]) return 0;
  if (d[v] < c[v]) x += c[v] - d[v], tmp -= c[v] - d[v], d[v] = c[v];
  if (x == 1) return 0;
  return 1;
}
bool rec(int x) {
  bool rez = 0;
  if (x == m - 1) {
    tmp = leaf;
    rez = dfs(x);
    return (!tmp ? rez : 0);
  }
  int i;
  for (i = x + 1; i < m; ++i) {
    par[x] = i;
    child[i].push_back(x);
    rez = (rec(x + 1) ? 1 : rez);
    child[i].pop_back();
  }
  return rez;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int i;
  cin >> n;
  for (i = 0; i < n; ++i) {
    cin >> m;
    if (m == 1)
      ++leaf;
    else {
      c.push_back(m);
      d.push_back(0);
      par.push_back(0);
    }
  }
  sort(c.begin(), c.end());
  m = c.size();
  if (m > 11) return cout << "NO\n", 0;
  if (n == 1 && leaf == 1) return cout << "YES\n", 0;
  cout << (rec(0) ? "YES" : "NO") << '\n';
  return 0;
}
