#include <bits/stdc++.h>
const int INF = 2147483647;
inline void checkMin(int& y, int x) {
  if (x < y) y = x;
}
const int N = 60;
const int M = 60;
const int K = 1000;
int d0[M][N][N];
int f[K + 1][N][N];
int d1[N][N];
int n, m, r;
void print(const char* s, int a[N][N], int n) {
  puts(s);
  int i, j;
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) {
      printf("%d%c", a[i][j], j < n - 1 ? '\t' : '\n');
    }
  }
}
void floyd(int a[N][N], int n) {
  int i, j, k;
  for (k = 0; k < n; k++) {
    for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++) {
        checkMin(a[i][j], a[i][k] + a[k][j]);
      }
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &r);
  int i, j, k, l;
  for (i = 0; i < m; i++) {
    for (j = 0; j < n; j++) {
      for (k = 0; k < n; k++) {
        scanf("%d", &d0[i][j][k]);
      }
    }
  }
  for (i = 0; i < m; i++) {
    floyd(d0[i], n);
    for (j = 0; j < n; j++) {
      for (k = 0; k < n; k++) {
        if (i == 0) {
          d1[j][k] = d0[i][j][k];
        } else {
          checkMin(d1[j][k], d0[i][j][k]);
        }
      }
    }
  }
  for (i = 0; i <= K; i++) {
    for (j = 0; j < n; j++) {
      for (k = 0; k < n; k++) {
        f[i][j][k] = d1[j][k];
      }
    }
  }
  for (l = 0; l < K; l++) {
    for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++) {
        int* y = f[l + 1][i];
        int first = f[l][i][j];
        int* p = d1[j];
        for (k = 0; k < n; k++) {
          checkMin(y[k], first + p[k]);
        }
      }
    }
  }
  for (i = 0; i < r; i++) {
    int s, t, k;
    scanf("%d%d%d", &s, &t, &k);
    s--;
    t--;
    int ans = f[k][s][t];
    printf("%d\n", ans);
  }
  return 0;
}
