#include using namespace std; using ll = long long; #define ALL(v) (v).begin(), (v).end() #define rep(i, a, b) for (int i = (int)(a); i < (int)(b); i++) ll ceil(ll a, ll b) { return a <= 0 ? a / b : (a - 1) / b + 1; } int main() { int NA, NB, NC; cin >> NA >> NB >> NC; vector A(NA), B(NB), C(NC); for (auto& v : A) cin >> v; for (auto& v : B) cin >> v; for (auto& v : C) cin >> v; sort(ALL(A)); sort(ALL(B)); sort(ALL(C)); vector Aasc = A; reverse(ALL(A)); reverse(ALL(B)); reverse(ALL(C)); vector sumA(NA + 1), sumB(NB + 1), sumC(NC + 1); rep(i, 0, NA) sumA[i + 1] = sumA[i] + A[i]; rep(i, 0, NB) sumB[i + 1] = sumB[i] + B[i]; rep(i, 0, NC) sumC[i + 1] = sumC[i] + C[i]; ll ans = 0; rep(cB, 0, NB + 1) { if (0 < cB && cB < NB && B[cB - 1] == B[cB]) continue; ll sB = sumB[cB]; rep(cC, 0, NC + 1) { if (0 < cC && cC < NC && C[cC - 1] == C[cC]) continue; ll sC = sumC[cC]; if (cB == 0) { ans = max(ans, sB * cC + max(0ll, sC * NA)); } else { int k = lower_bound(ALL(Aasc), ceil(-sC, cB)) - Aasc.begin(); int cA = NA - k; ll sA = sumA[cA]; ans = max(ans, sA * cB + sB * cC + sC * cA); } } } cout << ans << "\n"; }