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<int> cnt;
int ones;
bool solve(vector<int> cur, vector<bool> vis, int idx) {
  if (idx == cnt.size()) {
    int onecnt = 0;
    for (int i = 0; i < cur.size(); ++i) onecnt += cur[i];
    return ones == onecnt;
  }
  for (int i = 0; i < cur.size(); ++i) {
    if (vis[i]) {
      if (cur[i] >= cnt[idx]) {
        vector<int> tmp = cur;
        vector<bool> tmpvis = vis;
        tmp[i] -= cnt[idx];
        tmp.push_back(cnt[idx] - 1);
        tmpvis.push_back(false);
        if (solve(tmp, tmpvis, idx + 1)) return true;
      }
    } else {
      if (cur[i] > cnt[idx]) {
        vector<int> tmp = cur;
        vector<bool> tmpvis = vis;
        tmp[i] -= cnt[idx];
        tmpvis[i] = true;
        tmp.push_back(cnt[idx] - 1);
        tmpvis.push_back(false);
        if (solve(tmp, tmpvis, idx + 1)) return true;
      }
    }
  }
  return false;
}
int main() {
  int n;
  cin >> n;
  int cnt2 = 0, cntn = 0;
  ones = 0;
  for (int i = 0; i < n; ++i) {
    int a;
    cin >> a;
    if (a == 2) cnt2++;
    if (a == n) cntn++;
    if (a == 1)
      ones++;
    else
      cnt.push_back(a);
  }
  if (cnt2 != 0 || cntn != 1) {
    cout << "NO" << endl;
    return 0;
  }
  sort(cnt.rbegin(), cnt.rend());
  if (cnt.size() == 0) {
    if (ones == 1)
      cout << "YES" << endl;
    else
      cout << "NO" << endl;
    return 0;
  }
  vector<int> cur;
  vector<bool> vis;
  cur.push_back(cnt[0] - 1);
  vis.push_back(false);
  if (solve(cur, vis, 1))
    cout << "YES" << endl;
  else
    cout << "NO" << endl;
}
