#include <bits/stdc++.h>
using namespace std;
const long long int INF = 1e18;
const int maxn = 105;
long long int dp[maxn][maxn][maxn];
long long int cost[maxn][maxn];
long long int tree[maxn];
int tnum, cnum, beauty;
long long int getMin(long long int a, long long int b) { return a < b ? a : b; }
void init() {
  int i, j, k;
  for (i = 0; i < maxn; i++) {
    for (j = 0; j < maxn; j++) {
      for (k = 0; k < maxn; k++) {
        dp[i][j][k] = INF;
      }
    }
  }
}
void input() {
  int i, j;
  for (i = 1; i <= tnum; i++) {
    cin >> tree[i];
  }
  for (i = 1; i <= tnum; i++) {
    for (j = 1; j <= cnum; j++) {
      cin >> cost[i][j];
    }
  }
}
void colored(int i, int j, int value) {
  int k;
  for (k = 1; k <= cnum; k++) {
    if (k == tree[i]) {
      dp[i][j][tree[i]] = getMin(dp[i][j][tree[i]], dp[i - 1][j][k] + value);
    } else {
      dp[i][j][tree[i]] =
          getMin(dp[i][j][tree[i]], dp[i - 1][j - 1][k] + value);
    }
  }
}
void uncolored(int i, int j) {
  int k;
  long long int min1, min2;
  int color1 = -1, color2 = -1;
  min1 = INF;
  min2 = INF;
  for (k = 1; k <= cnum; k++) {
    if (min1 >= dp[i - 1][j - 1][k]) {
      min2 = min1;
      min1 = dp[i - 1][j - 1][k];
      color1 = k;
    } else if (min2 >= dp[i - 1][j - 1][k]) {
      min2 = dp[i - 1][j - 1][k];
    }
  }
  for (k = 1; k <= cnum; k++) {
    dp[i][j][k] = getMin(dp[i][j][k], dp[i - 1][j][k] + cost[i][k]);
    if (k != color1) {
      dp[i][j][k] = getMin(dp[i][j][k], min1 + cost[i][k]);
    } else if (min2 != INF) {
      dp[i][j][k] = getMin(dp[i][j][k], min2 + cost[i][k]);
    }
  }
}
long long int getAns() {
  long long int ans = INF;
  int i, j, k;
  if (tree[1] == 0) {
    for (k = 1; k <= cnum; k++) {
      dp[1][1][k] = cost[1][k];
    }
  } else {
    dp[1][1][tree[1]] = 0;
  }
  for (i = 2; i <= tnum; i++) {
    for (j = 1; j <= beauty; j++) {
      if (tree[i] == 0) {
        uncolored(i, j);
      } else {
        colored(i, j, 0);
      }
    }
  }
  for (k = 1; k <= cnum; k++) {
    ans = getMin(ans, dp[tnum][beauty][k]);
  }
  if (ans == INF) {
    ans = -1;
  }
  return ans;
}
int main() {
  while (cin >> tnum >> cnum >> beauty) {
    init();
    input();
    cout << getAns() << endl;
  }
  return 0;
}
