#include #include #include #include #include #include #include #include #include #include #include #include #include #define debug_value(x) cerr << "line" << __LINE__ << ":<" << __func__ << ">:" << #x << "=" << x << endl; #define debug(x) cerr << "line" << __LINE__ << ":<" << __func__ << ">:" << x << endl; template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } using namespace std; typedef long long ll; template vector> vec2d(int n, int m, T v){ return vector>(n, vector(m, v)); } template vector>> vec3d(int n, int m, int k, T v){ return vector>>(n, vector>(m, vector(k, v))); } template void print_vector(vector v, char delimiter=' '){ if(v.empty()) { cout << endl; return; } for(int i = 0; i+1 < v.size(); i++) cout << v[i] << delimiter; cout << v.back() << endl; } using P = pair; vector

run_length(vector v){ int x = v[0]; int cnt = 1; vector

ans; for(int i = 1; i < v.size(); i++){ if(x == v[i]){ cnt++; }else{ ans.push_back({x, cnt}); x = v[i]; cnt = 1; } } ans.push_back({x, cnt}); return ans; } ll floor_div(ll x, ll y){ if(x%y == 0) return x/y; if(x > 0) return x/y; return x/y-1; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout << setprecision(10) << fixed; vector n(3); for(int i = 0; i < 3; i++) cin >> n[i]; vector> v(3); vector> vp(3); for(int i = 0; i < 3; i++){ v[i].resize(n[i]); for(int j = 0; j < n[i]; j++){ cin >> v[i][j]; } sort(v[i].begin(), v[i].end(), greater()); auto u = run_length(v[i]); ll sum = 0; ll cnt = 0; vp[i].push_back({sum, cnt}); for(auto [x, c]: u){ sum += x*c; cnt += c; vp[i].push_back({sum, cnt}); } } ll ans = 0; for(int j = 0; j < vp[1].size(); j++){ auto [sum1, cnt1] = vp[1][j]; for(int k = 0; k < vp[2].size(); k++){ auto [sum2, cnt2] = vp[2][k]; chmax(ans, sum1*cnt2); // for(int i = 0; i < v[0].size(); i++){ // auto [sum0, cnt0] = vp[0][i]; // chmax(ans, sum0*cnt1+sum1*cnt2+sum2*cnt0); // } } } // debug_value(ans) ll sum = accumulate(v[2].begin(), v[2].end(), 0ll); for(int j = 0; j < vp[1].size(); j++){ auto [sum1, cnt1] = vp[1][j]; int k = v[2].size()-1; ll sum2 = sum; vector indices(vp[0].size()-1); for(int i = 1; i < vp[0].size(); i++) indices[i-1] = i; if(sum1 < 0) reverse(indices.begin(), indices.end()); for(int i: indices){ auto [sum0, cnt0] = vp[0][i]; ll lim = floor_div(-sum1, cnt0); while(k >= 0 && v[2][k] <= lim) { sum2 -= v[2][k]; k--; } ll cnt2 = k+1; chmax(ans, sum0*cnt1+sum1*cnt2+sum2*cnt0); // cout << sum1 << ' ' << cnt0 << ":" << lim << ' '; } // cout << endl; } cout << ans << endl; }