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 maxn = 12;
int dp[1 << maxn][maxn * 2 + 1];
int sum[1 << maxn][maxn * 2 + 1];
bool can[1 << maxn][maxn * 2 + 1];
int a[maxn];
int n, cnt;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    if (a[i] == 1) cnt++;
  }
  if (cnt <= n / 2) {
    cout << "NO" << endl;
    return 0;
  }
  sort(a, a + n);
  reverse(a, a + n);
  n -= cnt;
  memset(dp, -1, sizeof dp);
  for (int i = 0; i <= cnt; i++) dp[0][i] = sum[0][i] = i;
  can[0][1] = true;
  for (int mask = 1; mask < (1 << n); mask++) {
    for (int i = 0; i <= cnt; i++) {
      int bg = -1;
      sum[mask][i] = i + __builtin_popcount(mask);
      for (int j = 0; j < n; j++)
        if ((mask >> j) & 1) {
          bg = j;
          break;
        }
      can[mask][i] = (dp[mask - (mask & -mask)][i] > 1) and
                     a[bg] - 1 == sum[mask - (mask & -mask)][i];
      if (can[mask][i]) dp[mask][i] = 1;
      for (int mask2 = mask; 1; mask2 = mask & (mask2 - 1)) {
        for (int j = 0; j <= i; j++)
          if (~dp[mask2][j] and ~dp[mask - mask2][i - j])
            ((dp[mask][i]) =
                 max((dp[mask][i]), (dp[mask2][j] + dp[mask - mask2][i - j])));
        if (!mask2) break;
      }
    }
  }
  cout << (can[(1 << n) - 1][cnt] ? "YES" : "NO") << endl;
  return 0;
}
