cpp
#include<iostream>
#include<algorithm>
using namespace std;
int a[6], bb[30][30], value[30];
void dp(int weight, int weight1)
{
for (int i = 0; i < 22; i++)
{
for (int j = 0; j < 22; j++)
{
bb[i][j] = 0;
}
}
for (int i = 1; i <= weight1; i++)
{
for (int j = 1; j <= weight; j++)
{
bb[i][j] = bb[i - 1][j];
if (value[i] <= j)
{
bb[i][j] = max(bb[i - 1][j], (bb[i - 1][j - value[i]] + value[i]));
}
}
}
}
int main()
{
int all = 0;
for (int i = 1; i <= 4; i++)cin >> a[i];
for (int i = 1; i <= 4; i++)
{
int mid = 0;
for (int j = 1; j <= a[i]; j++) {
cin >> value[j];
sort(value, value + a[i]);
mid += value[j];
}
int t = mid;
mid /= 2;
dp(mid, a[i]);
all += max(bb[a[i]][mid], t - bb[a[i]][mid]);
}
cout << all ;
}