#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 30;
int d[65][65][65], n, m;
int C[65][65][65];
void floyd(int t) {
  for (int k = 0; k < n; k++)
    for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++) {
        C[t][i][j] = min(C[t][i][k] + C[t][k][j], C[t][i][j]);
      }
}
int main() {
  int r, x, y, z;
  scanf("%d%d%d", &n, &m, &r);
  for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++)
      for (int k = 0; k < n; k++) {
        scanf("%d", &C[i][j][k]);
      }
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++) fill(d[i][j], d[i][j] + n + 1, inf);
  for (int i = 0; i < m; i++) {
    floyd(i);
    for (int j = 0; j < n; j++)
      for (int k = 0; k < n; k++) d[0][j][k] = min(d[0][j][k], C[i][j][k]);
  }
  for (int k = 1; k < n; k++)
    for (int p = 0; p < n; p++)
      for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) {
          if (i == j)
            d[k][i][j] = 0;
          else
            d[k][i][j] = min(d[k][i][j], d[k - 1][i][p] + d[0][p][j]);
        }
  for (int i = 0; i < r; i++) {
    scanf("%d%d%d", &x, &y, &z);
    x--, y--;
    z = min(z, n - 1);
    printf("%d\n", d[z][x][y]);
  }
}
