#include <bits/stdc++.h>
using namespace std;
const int maxn = 107;
long long int dp[maxn][maxn][maxn];
long long int a[maxn];
long long int b[maxn][maxn];
long long int n, m, k;
long long int maxVal = 1e14;
long long int fn(long long int i, long long int j, long long int l) {
  if (i > n || l >= k) {
    return maxVal;
  }
  if (i == n) {
    if (l == (k - 1)) {
      return 0;
    } else {
      return maxVal;
    }
  }
  long long int &r = dp[i][j][l];
  if (r != -1) return r;
  if (a[i] != 0) {
    r = fn(i + 1, a[i], l + ((a[i] != j) ? 1 : 0));
    return r;
  }
  long long int temp = maxVal;
  for (int p = 1; p <= m; p++) {
    temp = min(temp, fn(i + 1, p, l + ((p != j) ? 1 : 0)) + b[i][p - 1]);
  }
  r = temp;
  return r;
}
int main() {
  cin >> n >> m >> k;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> b[i][j];
    }
  }
  memset(dp, -1, sizeof(dp));
  long long int ans = maxVal;
  if (a[0] != 0) {
    ans = fn(1, a[0], 0);
  } else {
    for (int i = 1; i <= m; i++) {
      ans = min(ans, fn(1, i, 0) + b[0][i - 1]);
    }
  }
  if (ans >= maxVal) {
    cout << "-1\n";
  } else {
    cout << ans << "\n";
  }
}
