#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 1000000000000000001 long long A,B,C; vector a,b,c; long long get2(long long x,long long y,long long mid){ return x * c[mid] + y * mid; } long long get(long long x,long long y,long long mid){ long long l = 0,r = C; while(r-l>=3){ long long m0 = l + (r-l)/3; long long m1 = m0 + (r-l)/3; if(get2(x,b[mid],m0) <= get2(x,b[mid],m1))l = m0; else r = m1; } long long ret = -Inf64; for(long long i=max(0LL,l-2);i<=min(C,r+2);i++)ret = max(ret,get2(x,b[mid],i)); return ret + y * mid; } int main(){ cin>>A>>B>>C; a.resize(A),b.resize(B),c.resize(C); //vector a(A),b(B),c(C); rep(i,a.size())cin>>a[i]; rep(i,b.size())cin>>b[i]; rep(i,c.size())cin>>c[i]; sort(a.rbegin(),a.rend()); sort(b.rbegin(),b.rend()); sort(c.rbegin(),c.rend()); b.insert(b.begin(),0); c.insert(c.begin(),0); rep(i,B)b[i+1] += b[i]; rep(i,C)c[i+1] += c[i]; long long x = 0,y = 0; long long ans = -Inf64; rep(i,A+1){ x = i; long long l = 0,r = B; while(r-l>=3){ long long m0 = l + (r-l)/3; long long m1 = m0 + (r-l)/3; if(get(x,y,m0) <= get(x,y,m1))l = m0; else r = m1; } for(long long i=max(0LL,l-2);i<=min(B,r+2);i++)ans = max(ans,get(x,y,i)); if(i