module main; // https://kmjp.hatenablog.jp/entry/2015/07/16/1000 より // ビットDP import std; void main() { // 入力 auto N = readln.chomp.to!int; auto A = readln.split.to!(int[]); auto M = readln.chomp.to!int; auto B = readln.split.to!(int[]); // 答えの計算と出力 auto MA = new int[](1 << 11); foreach (i; 0 .. 1 << N) foreach (j; 0 .. N) if (i & (1 << j)) MA[i] += A[j]; B.sort!"a > b"; auto dp = new bool[][](12, 1 << 10); dp[0][0] = true; foreach (i; 0 .. M) { foreach (mask; 0 .. 1 << N) foreach (mask2; 0 .. 1 << N) if (!(mask & mask2) && dp[i][mask] && MA[mask2] <= B[i]) dp[i + 1][mask | mask2] = true; if (dp[i + 1][(1 << N) - 1]) { writeln(i + 1); return; } } writeln(-1); }