#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
long long power(long long x, long long y) {
  long long res = 1;
  while (y) {
    if (y & 1) res = (res * x) % 1000000007;
    y = y / 2, x = (x * x) % 1000000007;
  }
  return res % 1000000007;
}
const int N = 100001;
long long n, p, k;
long long dp[N][1 << 7];
vector<vector<long long> > arr;
long long func(long long ind, long long mask) {
  if (ind == n) {
    if (mask == ((1 << p) - 1)) return 0;
    return -1e15;
  }
  long long &ret = dp[ind][mask];
  if (ret != -1) return ret;
  ret = -1e18;
  long long x = __builtin_popcount(mask);
  if (k + x >= ind + 1) ret = func(ind + 1, mask) + arr[ind][0];
  ret = max(ret, func(ind + 1, mask));
  for (long long i = 0; i < p; i++) {
    if (mask & (1 << i)) continue;
    ret = max(ret, func(ind + 1, mask | (1 << i)) + arr[ind][i + 1]);
  }
  return ret;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> p >> k;
  arr.resize(n);
  for (auto &v : arr) v.resize(p + 1);
  for (long long i = 0; i < (n); ++i) cin >> arr[i][0];
  for (long long i = 0; i < (n); ++i)
    for (long long j = 0; j < (p); ++j) cin >> arr[i][j + 1];
  sort(arr.begin(), arr.end());
  reverse(arr.begin(), arr.end());
  memset(dp, -1, sizeof(dp));
  cout << func(0, 0);
}
