#include <bits/stdc++.h>
using namespace std;
const long long MOD = (long long)1e9 + 7;
const long double PI = 3.141592653589793238462643383279502884197;
long long fac[1] = {1}, inv[1] = {1};
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long mp(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = ret * a % MOD;
    a = a * a % MOD;
    b >>= 1;
  }
  return ret;
}
long long cmb(long long r, long long c) {
  return fac[r] * inv[c] % MOD * inv[r - c] % MOD;
}
int n[3];
int vec[3][200];
long long dp[201][201][201];
long long go(int a, int b, int c) {
  if (dp[a][b][c] != -1) return dp[a][b][c];
  long long mav = 0;
  int nn[3] = {a, b, c};
  for (int i = 0; i < 3; i++) {
    int flag = 0;
    for (int j = 0; j < 3; j++) {
      if (i == j) continue;
      if (nn[j] == n[j]) flag = 1;
    }
    if (flag) continue;
    if (i == 0) mav = max(mav, go(a, b + 1, c + 1) + vec[1][b] * vec[2][c]);
    if (i == 1) mav = max(mav, go(a + 1, b, c + 1) + vec[0][a] * vec[2][c]);
    if (i == 2) mav = max(mav, go(a + 1, b + 1, c) + vec[0][a] * vec[1][b]);
  }
  return dp[a][b][c] = mav;
}
int main() {
  memset(dp, -1, sizeof(dp));
  scanf("%d %d %d", &n[0], &n[1], &n[2]);
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < n[i]; j++) scanf("%d", &vec[i][j]);
    sort(vec[i], vec[i] + n[i], greater<long long>());
  }
  long long ans = go(0, 0, 0);
  printf("%lld", ans);
}
