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;
vector<pair<int, int> > vt[25];
int dp[11][24][(1 << 11)];
int n;
int a[24];
int rec(int pos, int ones, int mask) {
  if (a[pos] == 1) return __builtin_popcount(mask) == pos && ones == 0;
  int &ret = dp[pos][ones][mask];
  if (ret != -1) return ret;
  ret = 0;
  for (auto p : vt[pos]) {
    if (mask + p.first == (mask ^ p.first)) {
      int need = a[pos] - 1 - p.second;
      if (ones >= need) {
        if (__builtin_popcount(p.first) + need >= 2)
          ret |= rec(pos + 1, ones - need, mask + p.first);
        if (ret) return ret;
      }
    }
  }
  if (a[pos] - 1 >= 2 && ones >= a[pos] - 1)
    rec(pos + 1, ones - (a[pos] - 1), mask);
  return ret;
}
int main() {
  memset(dp, -1, sizeof dp);
  scanf("%d", &n);
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    if (a[i] == 1) cnt++;
  }
  sort(a, a + n);
  reverse(a, a + n);
  if (cnt + cnt - 1 < n || a[0] != n || a[0] == 2) printf("NO\n"), exit(0);
  if (n == 1 && a[0] == 1) printf("YES\n"), exit(0);
  for (int i = 0; i < n; i++) {
    if (a[i] == 1) break;
    assert(i < 11);
    for (int j = 0; j < (1 << 11); j++) {
      int sum = 0;
      for (int k = 0; k < 11; k++) {
        if (j & (1 << k)) {
          if (a[k] == 1) sum = a[i];
          sum += a[k];
        }
      }
      if (sum < a[i]) {
        vt[i].push_back({j, sum});
      }
    }
  }
  if (rec(0, cnt, 1))
    cout << "YES\n";
  else
    cout << "NO\n";
  return 0;
}
