#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e3 + 10, MOD = 1e9 + 7;
int n, m, a[60], b[N], sum[N], total, waste;
bool dfs(int mid, int idx1, int idx2, int cur) {
if (idx2 > mid)
return true;
if (total - waste < sum[mid])
return false;
for (int i = idx1; i <= m; ++i) {
if (cur + b[idx2] < a[i]) {
while (b[idx2] == b[idx2 + 1])
idx2++;
if (dfs(mid, i, idx2 + 1, cur + b[idx2]))
return true;
} else {
if (a[i + 1] < b[idx2])
return false;
if (cur + b[idx2] == a[i] &&
dfs(mid, i + 1, idx2 + 1, cur + b[idx2]))
return true;
waste += a[i] - cur;
if (dfs(mid, i + 1, idx2, 0))
return true;
waste -= a[i] - cur;
}
}
return false;
}
bool check(int mid) {
waste = 0;
return dfs(mid, 1, 1, 0);
}
signed main() {
#ifndef ONLINE_JUDGE
freopen(".in", "r", stdin);
#else
cin.tie(0)->sync_with_stdio(0);
#endif
cin >> m;
for (int i = 1; i <= m; ++i)
cin >> a[i], total += a[i];
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> b[i];
sort(a + 1, a + 1 + m, greater<int>());
sort(b + 1, b + 1 + n);
partial_sum(b + 1, b + 1 + n, sum + 1);
while (sum[n] > total)
n--;
int l = 0, r = n;
while (l < r) {
int mid = l + r + 1 >> 1;
if (check(mid))
l = mid;
else
r = mid - 1;
}
cout << l;
}