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.util.*;
public class c {
public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    int n = input.nextInt();
    int[] data = new int[n];
    for(int i =0; i<n; i++) data[i] = input.nextInt();
    Arrays.sort(data);
    System.out.println(data[n-1] == n && good(data, n-1, new boolean[n]) ? "YES" :"NO");
}
static boolean good(int[] data, int at, boolean[] used)
{
    //System.out.println(at+" "+Arrays.toString(used));
    if(data[at] == 1) return true;
    int left = data[at]-1;
    //used[at] = true;
    for(int i = at-1; i>=0; i--)
    {
        if(used[i]) continue;
        if(data[i] <= left && data[i] < data[at] - 1)
        {
            used[i] = true;
            if(!good(data, i, used))
            {
                return false;
            }
            left -= data[i];
        }
    }
    return left == 0;
}
}
