#include <bits/stdc++.h>
using namespace std;
int n, m, s, a[15], sum[1 << 11];
int f[15][1 << 11][15];
void dfs(int i, int s1, int s2, int t, int dep) {
  if (dep >= m) {
    if (s2 - a[i] + sum[t] + 1 >= 0 &&
        a[i] - sum[t] - 1 + __builtin_popcount(t) >= 2)
      f[i][s1 | t][s2 - a[i] + sum[t] + 1] = 1;
  } else {
    dfs(i, s1, s2, t, dep + 1);
    if (!(s1 & (1 << dep)) && dep >= i) dfs(i, s1, s2, t | (1 << dep), dep + 1);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1, p; i <= n; i++) {
    scanf("%d", &p);
    if (p == 2)
      return puts("NO"), 0;
    else if (p == 1)
      s++;
    else
      a[++m] = p;
  }
  if (n == 1 && s == 1) return puts("YES"), 0;
  sort(a + 1, a + m + 1, greater<int>());
  if (s <= m) return puts("NO"), 0;
  for (int i = 1; i < (1 << m); i++)
    sum[i] = a[__builtin_ctz(i) + 1] + sum[i ^ (i & (-i))];
  f[0][1][s] = 1;
  for (int i = 0; i < m; i++)
    for (int j = 1; j < (1 << m); j++)
      if (!i || (j & (1 << i - 1)))
        for (int k = 0; k <= s; k++)
          if (f[i][j][k]) dfs(i + 1, j, k, 0, 0);
  puts(f[m][(1 << m) - 1][0] ? "YES" : "NO");
  return 0;
}
