#include #include #include using namespace std; void update(pair& a, pair b){ if(b.first < a.first){ a = b; } else if(b.first == a.first && b.second > a.second){ a = b; } } int main(){ int N, M; cin >> N; vector A(N); for(int i=0;i> A[i]; cin >> M; vector B(M); for(int i=0;i> B[i]; sort(B.rbegin(), B.rend()); const pair none = make_pair(1000, -1);; vector< pair > dp(1 << N, none); dp[0] = make_pair(0, B[0]); for(int S=0;S<1<> i) & 1)continue; if(A[i] > rest)continue; update(dp[S | (1 << i)], make_pair(k, rest - A[i])); } if(k + 1 < M){ for(int i=0;i> i) & 1)continue; if(A[i] > B[k + 1])continue; update(dp[S | (1 << i)], make_pair(k + 1, B[k + 1] - A[i])); } } } int res = -1; if(dp[(1 << N) - 1] != none){ res = dp[(1 << N) - 1].first + 1; } cout << res << endl; return 0; }