#include <bits/stdc++.h>
using namespace std;
int c[200010], id[200010], u[200010], v[200010], w[200010], mat[512][512];
bool vis[200010], col[512];
struct Edge {
  int ed, nxt;
} edge[200010 << 1];
int head[200010], nEdge;
void init() {
  memset(head, -1, sizeof(head));
  nEdge = 0;
}
void addEdge(int a, int b) {
  edge[nEdge].ed = b;
  edge[nEdge].nxt = head[a];
  head[a] = nEdge++;
  edge[nEdge].ed = a;
  edge[nEdge].nxt = head[b];
  head[b] = nEdge++;
}
void dfs(int x) {
  int i, y;
  vis[x] = true;
  col[id[x]] = true;
  for (i = head[x]; ~i; i = edge[i].nxt) {
    if (!vis[y = edge[i].ed]) dfs(y);
  }
}
bool check(int k) {
  int i;
  for (i = k ? c[k - 1] : 0; i < c[k]; ++i) {
    if (!vis[i]) return false;
  }
  return true;
}
void floyd(int n) {
  int i, j, k;
  for (k = 0; k < n; ++k) {
    for (i = 0; i < n; ++i) {
      for (j = 0; j < n; ++j) {
        mat[i][j] = min(mat[i][j], mat[i][k] + mat[k][j]);
      }
    }
  }
}
bool solve(int n, int m, int k) {
  int i, a, b;
  for (i = 1; i < k; ++i) c[i] += c[i - 1];
  fill(id, id + c[0], 0);
  for (i = 1; i < k; ++i) fill(id + c[i - 1], id + c[i], i);
  init();
  for (i = 0; i < m; ++i) {
    if (!w[i]) addEdge(u[i], v[i]);
  }
  memset(vis, 0, sizeof(vis));
  memset(col, 0, sizeof(col));
  for (i = 0; i < k; ++i) {
    if (!col[i]) dfs(c[i] - 1);
    if (!check(i)) return false;
  }
  memset(mat, 0x3F, sizeof(mat));
  for (i = 0; i < k; ++i) mat[i][i] = 0;
  for (i = 0; i < m; ++i) {
    a = id[u[i]];
    b = id[v[i]];
    if (a == b) continue;
    mat[a][b] = mat[b][a] = min(mat[a][b], w[i]);
  }
  floyd(k);
  return true;
}
int main() {
  int n, m, k, i, j;
  while (~scanf("%d %d %d", &n, &m, &k)) {
    for (i = 0; i < k; ++i) scanf("%d", &c[i]);
    for (i = 0; i < m; ++i) {
      scanf("%d %d %d", &u[i], &v[i], &w[i]);
      --u[i];
      --v[i];
    }
    if (!solve(n, m, k))
      printf("No\n");
    else {
      printf("Yes\n");
      for (i = 0; i < k; ++i) {
        for (j = 0; j < k; ++j) {
          printf("%d%c", mat[i][j] < 0x3F3F3F3F ? mat[i][j] : -1,
                 j < k - 1 ? ' ' : '\n');
        }
      }
    }
  }
  return 0;
}
