func_code_string: #include <bits/stdc++.h>   const double pi = acos(-1.0);   using namespace std;   inline long long MAX2(long long a, long long b) {     return (a) > (b) ? (a) : (b);   }   inline long long MAX3(long long a, long long b, long long c) {     return (a) > (b) ? ((a) > (c) ? (a) : (c)) : ((b) > (c) ? (b) : (c));   }   inline long long MIN2(long long a, long long b) {     return (a) < (b) ? (a) : (b);   }   inline long long MIN3(long long a, long long b, long long c) {     return (a) < (b) ? ((a) < (c) ? (a) : (c)) : ((b) < (c) ? (b) : (c));   }   int mod = 1e9 + 7;   int64_t extGcd(int64_t a, int64_t b, int64_t& x, int64_t& y) {     if (!a) {       x = 0;       y = 1;       return b;     }     int64_t x1, y1;     int64_t d = extGcd(b % a, a, x1, y1);     x = y1 - (b / a) * x1;     y = x1;     return d;   }   inline long long addmod(long long a, long long b) {     a = a % mod + b % mod;     if (a > mod) a %= mod;     return a;   }   inline long long submod(long long a, long long b) {     a = a % mod - b % mod;     if (a < 0) a += mod;     return a;   }   inline long long mulmod(long long a, long long b) {     return (a % mod * b % mod) % mod;   }   int dx[] = {1, 1, 0, -1, -1, -1, 0, 1};   int dy[] = {0, 1, 1, 1, 0, -1, -1, -1};   inline long long exp(long long a, long long b) {     if (a == 0) return 0ll;     long long r = 1LL;     while (b > 0) {       if (b & 1) {         r = r * (a % mod);         r = (r + mod) % mod;       }       b /= 2;       a = (a % mod) * (a % mod);       a = (a + mod) % mod;     }     return (r + mod) % mod;   }   long long gcd(long long a, long long b) {     if (b == 0) return a;     if (a == 0) return b;     return gcd(b, a % b);   }   unsigned long int setbits(long long n) {     unsigned long int count = 0;     while (n) {       n &= (n - 1);       count++;     }     return count;   }   int main() {     if (fopen( input.txt ,  r ))       freopen( input.txt ,  r , stdin), freopen( output.txt ,  w , stdout);     ;     int t;     cin >> t;     while (t--) {       int n, k, z;       cin >> n >> k >> z;       long long a[n];       long long pre[n + 1];       pre[0] = 0;       for (long long i = (long long)(0); i < (long long)(n); i++) {         cin >> a[i];         pre[i + 1] = pre[i] + a[i];       }       long long ans = 0;       long long curr_sum = a[0];       for (int i = 1; i <= min(k, n - 1); i++) {         curr_sum += a[i];         long long prev = a[i - 1];         long long last = a[i];         int rem = (k - i);         int resz = z;         long long res = curr_sum;         int nxt = i;         while (resz > 0 and rem > 0) {           if (rem <= 0) {             nxt = i;             break;           }           res += prev;           resz--;           rem--;           if (rem <= 0) {             nxt = i - 1;             break;           }           res += last;           rem--;         }         res += pre[nxt + rem + 1] - pre[nxt + 1];         ans = MAX2(ans, res);       }       cout << ans <<   n ;     }   }   