#include <bits/stdc++.h>
int n, m, r;
int mat[61][61], opt[61][61][61];
int main() {
  scanf("%d%d%d", &n, &m, &r);
  for (int i = (0); i < (n); i++)
    for (int j = (0); j < (n); j++)
      for (int k = (0); k < (n); k++) opt[i][j][k] = 1000000000;
  for (int k = (0); k < (m); k++) {
    for (int i = (0); i < (n); i++)
      for (int j = (0); j < (n); j++) scanf("%d", &mat[i][j]);
    for (int k = (0); k < (n); k++)
      for (int i = (0); i < (n); i++)
        for (int j = (0); j < (n); j++)
          mat[i][j] = (((mat[i][j]) < (mat[i][k] + mat[k][j]))
                           ? (mat[i][j])
                           : (mat[i][k] + mat[k][j]));
    for (int i = (0); i < (n); i++)
      for (int j = (0); j < (n); j++)
        opt[i][j][0] =
            (((opt[i][j][0]) < (mat[i][j])) ? (opt[i][j][0]) : (mat[i][j]));
  }
  for (int p = (1); p < (n); p++)
    for (int i = (0); i < (n); i++)
      for (int j = (0); j < (n); j++)
        for (int k = (0); k < (n); k++)
          opt[i][j][p] = (((opt[i][j][p]) < (opt[i][k][p - 1] + opt[k][j][0]))
                              ? (opt[i][j][p])
                              : (opt[i][k][p - 1] + opt[k][j][0]));
  while (r--) {
    int u, v, k;
    scanf("%d%d%d", &u, &v, &k);
    printf("%d\n", opt[u - 1][v - 1][(((k) < (n - 1)) ? (k) : (n - 1))]);
  }
  return 0;
}
