Iahub and Iahubina went to a picnic in a forest full of trees. Less than 5 minutes passed before Iahub remembered of trees from programming. Moreover, he invented a new problem and Iahubina has to solve it, otherwise Iahub won't give her the food. 

Iahub asks Iahubina: can you build a rooted tree, such that

  * each internal node (a node with at least one son) has at least two sons; 
  * node i has ci nodes in its subtree? 



Iahubina has to guess the tree. Being a smart girl, she realized that it's possible no tree can follow Iahub's restrictions. In this way, Iahub will eat all the food. You need to help Iahubina: determine if there's at least one tree following Iahub's restrictions. The required tree must contain n nodes.

Input

The first line of the input contains integer n (1 ≤ n ≤ 24). Next line contains n positive integers: the i-th number represents ci (1 ≤ ci ≤ n).

Output

Output on the first line "YES" (without quotes) if there exist at least one tree following Iahub's restrictions, otherwise output "NO" (without quotes). 

Examples

Input

4
1 1 1 4


Output

YES

Input

5
1 1 5 2 1


Output

NO
import java.io.*;
import java.util.*;

public class C245C
{
    public static StringTokenizer st;
    public static void nextLine(BufferedReader br) throws IOException
    {
        st = new StringTokenizer(br.readLine());
    }
    
    public static String next()
    {
        return st.nextToken();
    }
    
    public static int nextInt()
    {
        return Integer.parseInt(st.nextToken());
    }
    
    public static long nextLong()
    {
        return Long.parseLong(st.nextToken());
    }
    
    public static double nextDouble()
    {
        return Double.parseDouble(st.nextToken());
    }
    
    static int n;
    static int[] a;
    static ArrayList<Integer> rem;
    
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        nextLine(br);
        n = nextInt();
        a = new int[n];
        nextLine(br);
        for (int i = 0; i < n; i++)
        {
            a[i] = nextInt();
            if (a[i] == 2) fail();
        }
        if (n == 2) fail();
        if (n == 1 && a[0] == 1) pass();
        Arrays.sort(a);
        if (a[n-1] != n) fail();
        rem = new ArrayList<Integer>();
        int pool = 0;
        for (int i = 0; i < n; i++)
        {
            if (a[i] == 1) pool++;
            else rem.add(a[i]);
        }
        if (rem.isEmpty()) fail();
        if (pool < (n+1)/2) fail();
        solve(pool, 0, new ArrayList<Integer>());
        fail();
    }
    
    private static boolean solve(int pool, int pos, ArrayList<Integer> used)
    {
        int cur = rem.get(pos);
        if (pos == rem.size() - 1)
        {
            int sum = 0;
            for (Integer val : used)
            {
                sum += val;
            }
            //System.out.println(used + " " + pool);
            if (sum + pool != n-1) return false;
            if (used.isEmpty() && pool < 2) return false;
            if (used.size() == 1 && pool < 1) return false;
            pass();
        }
        for (int i = 0; i < (1 << used.size()); i++)
        {
            int count = 0;
            int sum = 0;
            for (int j = 0; j < used.size(); j++)
            {
                if (((i >> j) & 1) == 1)
                {
                    sum += used.get(j);
                    count++;
                }
            }
            if (sum >= cur) continue;
            if (pool < cur - sum - 1) continue;
            if (count == 1 && cur - sum <= 1) continue;
            ArrayList<Integer> clone = (ArrayList<Integer>) used.clone();
            for (int j = clone.size() - 1; j >= 0; j--)
            {
                if (((i >> j) & 1) == 1)
                {
                    clone.remove(j);
                }
            }
            clone.add(cur);
            solve(pool - (cur - sum - 1), pos + 1, clone);
        }
        return false;
    }
    
    private static void fail()
    {
        System.out.println("NO");
        System.exit(0);
    }
    
    private static void pass()
    {
        System.out.println("YES");
        System.exit(0);
    }
}
