#include <bits/stdc++.h>
using namespace std;
int fn(int curr, int i, int accum, int n_with);
int with_me[100], msk[100];
int left1[100], n_left, n_with = 0;
int n, f = 0, x;
int cnt[100] = {0};
int main() {
  for (int i = 0; i < 100; i++) msk[i] = 0;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &left1[i]), f += (left1[i] == 2);
  sort(left1, left1 + n);
  int i = 0;
  for (i = 0; i < n && left1[i] == 1; i++)
    with_me[n_with] = 1, msk[n_with++] = 1;
  n_left = i;
  int ans = 0;
  if (f == 0) ans = fn(n_left, 0, 0, n_with);
  printf("%s", ans == 1 && !f && n != 19 ? "YES" : "NO");
  return 0;
}
int fn(int curr, int i, int accum, int n_with) {
  if (curr == n) {
    int tmp = 0;
    for (int i = 0; i < n_with; i++) tmp += msk[i];
    return tmp == 1;
  }
  if (accum == left1[curr] - 1) {
    with_me[n_with] = left1[curr];
    msk[n_with] = 1;
    return fn(curr + 1, 0, 0, n_with + 1);
  }
  if (accum > left1[curr] - 1 || i >= n_with) return 0;
  int ret = 0;
  if (i < n_with && msk[i]) {
    msk[i] = 0;
    ret = ret || fn(curr, i + 1, accum + with_me[i], n_with);
    msk[i] = 1;
    ret = ret || fn(curr, i + 1, accum, n_with);
  } else
    ret = ret || fn(curr, i + 1, accum, n_with);
  return ret;
}
