#include <bits/stdc++.h>
using
namespace
std;
vector<vector<
int
> > minSizeSum(
int
a[],
int
n)
{
int
sum = 0;
for
(
int
i = 0; i < n; i++)
sum += a[i];
vector<vector<
int
> > dp(n + 1,
vector<
int
>(sum + 1, 1e9));
for
(
int
i = 0; i <= n; i++)
dp[i][0] = 0;
for
(
int
i = 1; i <= n; i++) {
for
(
int
j = 1; j <= sum; j++) {
if
(j < a[i - 1])
dp[i][j] = dp[i - 1][j];
else
dp[i][j] = min(dp[i - 1][j],
dp[i - 1][j - a[i - 1]] + 1);
}
}
return
dp;
}
void
minOperations(
int
N,
int
M,
int
targetSum,
int
A[],
int
B[])
{
vector<vector<
int
> > dp1 = minSizeSum(A, N),
dp2 = minSizeSum(B, M);
int
sum1 = 0, sum2 = 0;
for
(
int
i = 0; i < N; i++)
sum1 += A[i];
for
(
int
i = 0; i < M; i++)
sum2 += B[i];
int
ans = 1e9;
for
(
int
p = 0; p <= sum1; p++) {
int
q = targetSum - sum1 + p;
if
(q < 0 || q > sum2)
continue
;
ans = min(ans, dp1[N][p] + dp2[M][q]);
}
if
(ans == 1e9)
ans = -1;
cout << ans << endl;
}
int
main()
{
int
N, M, targetSum = 12;
int
A[] = { 1, 2, 1, 4 };
int
B[] = { 5, 12, 11 };
N =
sizeof
(A) /
sizeof
(A[0]);
M =
sizeof
(B) /
sizeof
(B[0]);
minOperations(N, M, targetSum, A, B);
return
0;
}