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;
template <typename T>
void pv(T a, T b) {
  for (T i = a; i != b; ++i) cout << *i << " ";
  cout << endl;
}
template <typename T>
void chmin(T &t, const T &f) {
  if (t > f) t = f;
}
template <typename T>
void chmax(T &t, const T &f) {
  if (t < f) t = f;
}
int in() {
  int x;
  scanf("%d", &x);
  return x;
}
int N;
int A[110];
int now[110];
bool dfs(int i, int a, int dg, int lst) {
  if (i == N) {
    return true;
  }
  if (a == 1) {
    if (dg != 1) {
      ++now[A[i]];
      return dfs(i + 1, A[i + 1], 0, N);
    }
  } else {
    for (int c = min(a - 1, lst); c >= 1; --c)
      if (now[c]) {
        --now[c];
        if (dfs(i, a - c, dg + 1, c)) {
          return true;
        }
        ++now[c];
      }
  }
  return false;
}
bool solve() {
  if (A[N - 1] != N) {
    return false;
  }
  if (count(A, A + N, 2) != 0) {
    return false;
  }
  for (int i = 0; i < N; ++i) {
    if (A[i] > i + 1) {
      return false;
    }
  }
  A[N] = 0;
  fill_n(now, N + 1, 0);
  return dfs(0, A[0], 0, N);
}
int main() {
  for (; ~scanf("%d", &N);) {
    for (int i = 0; i < N; ++i) {
      A[i] = in();
    }
    sort(A, A + N);
    puts(solve() ? "YES" : "NO");
  }
  return 0;
}
