func_code_string: #include <bits/stdc++.h>   using namespace std;   void read(vector<long long int> &a, int n) {     a.resize(n);     for (int i = 0; i < n; i++) cin >> a[i];   }   bool fine = 0;   void solve() {     int x, y, z;     cin >> x >> y >> z;     vector<int> a(x), b(y), c(z);     for (int i = 0; i < x; i++) cin >> a[i];     for (int i = 0; i < y; i++) cin >> b[i];     for (int i = 0; i < z; i++) cin >> c[i];     sort(a.begin(), a.end());     sort(b.begin(), b.end());     sort(c.begin(), c.end());     reverse(a.begin(), a.end());     reverse(c.begin(), c.end());     reverse(b.begin(), b.end());     long long int ans = 0;     long long int dp[x + 1][y + 1][z + 1];     memset(dp, 0, sizeof(dp));     for (int i = 0; i < x + 1; i++) {       for (int j = 0; j < y + 1; j++) {         for (int k = 0; k < z + 1; k++) {           if ((i + j + k) < 2 || (i + j + k) & 1) continue;           if (i && j)             dp[i][j][k] =                 max(dp[i][j][k], dp[i - 1][j - 1][k] + a[i - 1] * b[j - 1]);           if (i && k)             dp[i][j][k] =                 max(dp[i][j][k], dp[i - 1][j][k - 1] + a[i - 1] * c[k - 1]);           if (k && j)             dp[i][j][k] =                 max(dp[i][j][k], dp[i][j - 1][k - 1] + b[j - 1] * c[k - 1]);           ans = max(dp[i][j][k], ans);         }       }     }     cout << ans << endl;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     if (fine) {       int t;       cin >> t;       while (t--) {         solve();       }     } else       solve();     return 0;   }   