#include <bits/stdc++.h>
using namespace std;
int parent[20], rnk[20];
int find(int x) { return (parent[x] == x) ? x : parent[x] = find(parent[x]); }
void merge(int a, int b) {
  int p1 = find(a), p2 = find(b);
  if (p1 == p2) return;
  if (rnk[p2] > rnk[p1]) swap(p1, p2);
  parent[p2] = p1;
  if (rnk[p1] == rnk[p2]) rnk[p1]++;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  int((a)[(n)]);
  for (int i = 0; i < (n); i++) cin >> ((a)[i]);
  sort(a, a + n);
  if (a[n - 1] != n) {
    cout << "NO\n";
    return 0;
  }
  int cnt = n - 1;
  for (int(i) = 0; (i) < (n); (i)++)
    if (a[i] == 1) cnt--;
  if (cnt * 2 >= n - 2) {
    cout << "NO\n";
    return 0;
  }
  reverse(a, a + n);
  int fac = 1;
  for (int(i) = (2); (i) < (cnt + 1); (i)++) fac *= i;
  for (int(bm) = 0; (bm) < (fac); (bm)++) {
    int f = 0;
    int par[cnt + 1];
    int tot[cnt + 1], tot2[cnt + 1];
    memset(tot, (0), sizeof(tot));
    memset(tot2, (0), sizeof(tot2));
    vector<int> v;
    int bmc = bm;
    for (int(i) = 0; (i) < (cnt); (i)++) {
      par[i + 1] = bmc % (i + 1);
      bmc /= i + 1;
    }
    for (int(i) = 0; (i) < (cnt + 1); (i)++) {
      parent[i] = i;
      rnk[i] = 1;
    }
    for (int(i) = (1); (i) < (cnt + 1); (i)++) {
      tot[par[i]] += a[i];
      tot2[par[i]] += 1;
    }
    if (f == 1) continue;
    for (int(i) = 0; (i) < (cnt + 1); (i)++)
      if ((a[i] - tot[i] - 1) < 0 or (a[i] - tot[i] - 1) + tot2[i] < 2) f = 1;
    int rem = cnt;
    for (int(i) = (0); (i) < (cnt + 1); (i)++) rem -= a[i] - tot[i];
    if (f == 0) {
      cout << "YES\n";
      return 0;
    }
  }
  cout << "NO\n";
  return 0;
}
