#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void smax(T &x, T y) {
  x = max((x), (y));
}
template <class T>
inline void smin(T &x, T y) {
  x = min((x), (y));
}
const int MOD = 1e9 + 7;
const int SIZE = 24 + 10;
const int INF = 0x3f3f3f3f;
const int MN = 300;
int n;
int c[SIZE];
int dp[11][1 << 11][24];
int sum[1 << 11];
void printmask(int x) {
  if (x == 0) return;
  int tmp = x & 1;
  printmask(x >> 1);
  printf("%d", tmp);
}
int add(int mask) {
  if (mask == 0) return 0;
  if (sum[mask] != -1) return sum[mask];
  return sum[mask] = c[__builtin_ctz((mask))] +
                     add(mask & ~(1 << (__builtin_ctz((mask)))));
}
int go(int node, int mask, int leafs) {
  if (mask >= (1 << 11) || leafs >= 24) return 0;
  if (leafs < 0) return 0;
  if (node >= min(n, 11)) {
    return mask == 0 && leafs == 0;
  }
  if (c[node] == 2) return 0;
  int &ret = dp[node][mask][leafs];
  if (ret != -1) return ret;
  ret = go(node + 1, mask & ~(1 << (node + 1)), leafs - c[node] + 1);
  for (int submask = mask; submask > 0; submask = (submask - 1) & mask) {
    int z = add(submask);
    int leafsneeded = c[node] - z - 1;
    if (leafsneeded < 0) continue;
    if (leafsneeded > leafs) continue;
    int numsons = __builtin_popcount((submask)) + leafsneeded;
    if (numsons < 2) continue;
    int nxmask = mask & ~submask;
    ret |= go(node + 1, nxmask & ~(1 << __builtin_ctz((node + 1))),
              leafs - leafsneeded);
  }
  return ret;
}
int main() {
  if (0) {
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
  }
  while (scanf("%d", &(n)) == 1) {
    for (int i = 0; i < (n); ++i) scanf("%d", &(c[i]));
    sort(c, c + n);
    reverse(c, c + n);
    int cnt1 = 0;
    for (int i = 0; i < (n); ++i)
      if (c[i] == 1) cnt1++;
    if (cnt1 == 1 && n == 1) {
      printf("YES\n");
      continue;
    }
    for (int i = 0; i < (n); ++i)
      if (c[i] == 1) {
        n = i;
        break;
      }
    memset((dp), -1, sizeof((dp)));
    memset((sum), -1, sizeof((sum)));
    bool ok = go(0, (1 << n) - 2, cnt1);
    if (ok) {
      printf("YES\n");
    } else {
      printf("NO\n");
    }
  }
  return 0;
}
