import itertools def solve(): import sys sys.setrecursionlimit(1 << 25) N = int(sys.stdin.readline()) A = list(map(int, sys.stdin.readline().split())) M = int(sys.stdin.readline()) B = list(map(int, sys.stdin.readline().split())) max_A = max(A) if N > 0 else 0 sum_A = sum(A) sum_B = sum(B) max_B = max(B) if M > 0 else 0 if max_A > max_B or sum_A > sum_B: print(-1) return n = len(A) sum_mask = [0] * (1 << n) for mask in range(1 << n): s = 0 for i in range(n): if mask & (1 << i): s += A[i] sum_mask[mask] = s for k in range(1, M + 1): for boxes in itertools.combinations(B, k): if sum(boxes) < sum_A: continue sorted_boxes = sorted(boxes, reverse=True) if sorted_boxes[0] < max_A: continue target_boxes = sorted_boxes from functools import lru_cache @lru_cache(maxsize=None) def backtrack(i, mask): if mask == 0 and i == k: return True if i >= k: return False if mask == 0: return False remaining_boxes = k - i available_toys = bin(mask).count('1') if available_toys < remaining_boxes: return False current_cap = target_boxes[i] s = mask while True: if s == 0: break if (s & mask) != s: s = (s - 1) & mask continue sum_s = sum_mask[s] if sum_s > current_cap: s = (s - 1) & mask continue cnt_s = bin(s).count('1') if cnt_s == 0: s = (s - 1) & mask continue new_mask = mask ^ s remaining_toys = bin(new_mask).count('1') if remaining_toys < (remaining_boxes - 1): s = (s - 1) & mask continue if backtrack(i + 1, new_mask): return True s = (s - 1) & mask return False if backtrack(0, (1 << n) - 1): print(k) return print(-1) solve()