#include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 9;   const long long mod = 998244353;   long long dp[N][1 << 7];   int s[N][1 << 7], st[N], Log[1 << 7];   struct node {     int v, id;   } a[N];   bool cmp(node a, node b) { return a.v > b.v; }   void upd(long long &a, long long b) {     if (a < b) a = b;   }   int main() {     int n, p, k;     for (int i = (1); i < (N); ++i) st[i] = st[i >> 1] + (i & 1);     for (int i = (0); i < (7); ++i) Log[1 << i] = i;     scanf( %d%d%d , &n, &p, &k);     for (int i = (1); i < (n + 1); ++i) {       scanf( %d , &a[i].v);       a[i].id = i;     }     sort(a + 1, a + 1 + n, cmp);     int op = (1 << p) - 1;     for (int i = (1); i < (n + 1); ++i)       for (int j = (0); j < (p); ++j) scanf( %d , &s[i][j]);     for (int i = (1); i < (p + k + 1); ++i) {       for (int mask = (0); mask < (1 << p); ++mask) {         if (st[mask] > i - 1) continue;         upd(dp[i - st[mask]][mask], dp[i - st[mask] - 1][mask] + a[i].v);         int pos = op ^ mask;         while (pos) {           upd(dp[i - st[mask] - 1][mask | ((pos) & (-pos))],               dp[i - st[mask] - 1][mask] + s[a[i].id][Log[((pos) & (-pos))]]);           pos ^= ((pos) & (-pos));         }       }     }     for (int i = (p + k + 1); i < (n + 1); ++i) {       for (int mask = (1 << p) - 1; mask >= (0); --mask) {         int pos = mask;         while (pos) {           upd(dp[k][mask],               dp[k][mask ^ ((pos) & (-pos))] + s[a[i].id][Log[((pos) & (-pos))]]);           pos ^= ((pos) & (-pos));         }       }     }     printf( %lld , dp[k][op]);   }   