#include<iostream>
#include<queue>
#include<cstdio>
#include<map>
#include<cstring>
#include<vector>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxn=2e5+45,MAXN=2e3+5,inf=0x3f3f3f3f;
const ll MOD=1e9+7;
priority_queue<ull,vector<ull>,less<ull> >red,green,blue;
int main()
{
ull r,g,b,x;
cin>>r>>g>>b;
ull S=0;
for(int i=1;i<=r;i++){
cin>>x;
red.push(x);
}
for(int i=1;i<=g;i++){
cin>>x;
green.push(x);
}
for(int i=1;i<=b;i++){
cin>>x;
blue.push(x);
}
while(red.size()&&blue.size()&&green.size()){
if(red.top()<=blue.top()&&red.top()<=green.top()){
S+=blue.top()*green.top();
blue.pop();green.pop();
}
else if(blue.top()<=green.top()){
S+=red.top()*green.top();
red.pop();green.pop();
}
else{
S+=red.top()*blue.top();
red.pop();blue.pop();
}
}
while(red.size()&&blue.size()){
S+=red.top()*blue.top();
red.pop();blue.pop();
}
while(red.size()&&green.size()){
S+=red.top()*green.top();
red.pop();green.pop();
}
while(blue.size()&&green.size()){
S+=blue.top()*green.top();
blue.pop();green.pop();
}
cout<<S<<endl;
return 0;
}