func_code_string: #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);   }   