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
// practice with rainboy
import java.io.*;
import java.util.*;

public class CF429C extends PrintWriter {
	CF429C() { super(System.out, true); }
	Scanner sc = new Scanner(System.in);
	public static void main(String[] $) {
		CF429C o = new CF429C(); o.main(); o.flush();
	}

	void main() {
		int n = sc.nextInt();
		int[] cc = new int[n];
		for (int i = 0; i < n; i++)
			cc[i] = sc.nextInt();
		Arrays.sort(cc);
		int k = 0;
		while (k < n && cc[k] == 1)
			k++;
		int m = n - k;
		int[] ss = new int[m];
		for (int i = k; i < n; i++)
			ss[i - k] = cc[i] - 1;
		for (int j = 1; j < m; j++)
			ss[j] += ss[j - 1];
		n--;
		int[] aa = new int[1 << n];
		for (int b = 1; b < 1 << n; b++) {
			int i = 0;
			while ((b & 1 << i) == 0)
				i++;
			aa[b] = aa[b ^ 1 << i] + cc[i];
		}
		int[] dp = new int[1 << n]; Arrays.fill(dp, -1); dp[0] = 0;
		for (int b = 0; b < 1 << n; b++) {
			int j = dp[b];
			if (j == -1 || j == m)
				continue;
			for (int i = 0; i < n; i++)
				if ((b & 1 << i) == 0) {
					int b_ = b | 1 << i;
					if (aa[b_] < ss[j])
						dp[b_] = j;
					else if (aa[b_] == ss[j] && aa[b] > (j == 0 ? 0 : ss[j - 1]))
						dp[b_] = j + 1;
				}
		}
		println(dp[(1 << n) - 1] == m ? "YES" : "NO");
	}
}
