#include <bits/stdc++.h>
using namespace std;
long long bigmod(long long b, long long p) {
  if (p == 0) return 1;
  long long my = bigmod(b, p / 2);
  my *= my;
  my %= 1000000007;
  if (p & 1) my *= b, my %= 1000000007;
  return my;
}
inline int setb(int n, int pos) { return n = n | (1 << pos); }
int resb(int n, int pos) { return n = n & ~(1 << pos); }
inline bool checkb(int n, int pos) { return (bool)(n & (1 << pos)); }
short int sum[(1 << 24)];
char pc[(1 << 24)], lc[(1 << 24)], votka[(1 << 24)];
int n, ara[30], mnval;
void prework() {
  int child_mask = 0;
  for (int i = 0; i < n; i++)
    if (ara[i] == 1) child_mask = setb(child_mask, i);
  for (int mask = 0; mask < (1 << n); mask++) {
    int v = 0;
    for (int i = 0; i < n; i++)
      if (checkb(mask, i)) sum[mask] += ara[i], v = max(v, ara[i]);
    votka[mask] = v;
    pc[mask] = __builtin_popcount(mask);
    lc[mask] = __builtin_popcount(mask & child_mask);
  }
}
bool F(int u, int mask);
bool G(int u, int baki, int taken) {
  if (u == n) return baki == 0;
  if (checkb(taken, u) == 0) return G(u + 1, baki, taken);
  bool ret = 0;
  if (F(u, 0)) ret |= G(u + 1, baki, taken ^ (1 << u));
  if (ara[u] > mnval) {
    for (int i = baki; i; i = (i - 1) & baki) {
      if (pc[i] == 1) continue;
      if (F(u, i)) ret |= G(u + 1, baki ^ i, taken ^ (1 << u));
      if (ret) goto shit;
    }
  }
shit:
  return ret;
}
inline bool Distribute(int u, int mask, int taken) {
  if (sum[mask] + 1 == ara[u]) return 1;
  int baki = mask ^ taken;
  return G(0, baki, taken);
}
bitset<(1 << 24)> dp[24];
bitset<(1 << 24)> visit[24];
bool F(int u, int mask) {
  if (mask == 0) return ara[u] <= mnval;
  if (visit[u][mask]) return dp[u][mask];
  bool ret = 0;
  for (int i = mask; i; i = (i - 1) & mask) {
    if (pc[i] > 1 && sum[i] + 1 == ara[u]) {
      ret |= Distribute(u, mask, i);
      if (ret) goto hell;
    }
  }
hell:
  visit[u][mask] = 1;
  return dp[u][mask] = ret;
}
int cnt[30];
void reduce() {
  int i;
  for (i = 0; i < n; i++) cnt[ara[i]]++;
  mnval = 4;
  if (cnt[3] + cnt[4] == 0) {
    for (i = 1; i <= n; i++) {
      if (i < 5) continue;
      if (cnt[i]) {
        mnval = i;
        cnt[1] -= cnt[i] * (i - 1);
        break;
      }
    }
  }
  cnt[1] -= cnt[3] * 2;
  cnt[1] -= cnt[4] * 3;
  if (cnt[1] < 0 || cnt[2]) {
    puts("NO");
    exit(0);
  }
  int id = 0;
  for (i = 1; i <= n; i++) {
    int x = cnt[i];
    while (x--) ara[id++] = i;
  }
  n = id;
}
int main() {
  int i, root;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d", &ara[i]);
  sort(ara, ara + n);
  if (ara[n - 1] != n) {
    puts("NO");
    return 0;
  }
  reduce();
  prework();
  root = n - 1;
  bool ret = F(root, ((1 << n) - 1) ^ (1 << root));
  if (ret)
    puts("YES");
  else
    puts("NO");
  return 0;
}
