#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 10;
struct Item {
  int a;
  int s[7];
};
Item P[N];
int cnt[1 << 7];
long long f[N][1 << 7];
bool cmp(const Item& x, const Item& y) { return x.a > y.a; }
int main() {
  int n, p, k, h, v, i, j;
  scanf("%d %d %d", &n, &p, &k);
  for (i = 1; i <= n; i++) scanf("%d", &P[i].a);
  for (i = 1; i <= n; i++)
    for (j = 0; j < p; j++) scanf("%d", &P[i].s[j]);
  sort(P + 1, P + n + 1, cmp);
  h = (1 << p);
  cnt[0] = 0;
  for (i = 1; i < h; i++) cnt[i] = cnt[i / 2] + i % 2;
  for (i = 1; i <= k; i++) f[0][0] += P[i].a;
  for (i = 1; i <= n; i++)
    for (j = 0; j < h; j++) {
      f[i][j] = f[i - 1][j];
      if (i - cnt[j] < k) {
        for (v = 0; v < p; v++)
          if (j & (1 << v))
            f[i][j] = max(f[i][j], P[i].s[v] + f[i - 1][j - (1 << v)] - P[i].a +
                                       P[k + cnt[j]].a);
      } else {
        for (v = 0; v < p; v++)
          if (j & (1 << v))
            f[i][j] = max(f[i][j], P[i].s[v] + f[i - 1][j - (1 << v)]);
      }
    }
  printf("%lld\n", f[n][h - 1]);
  return 0;
}
