#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, long long> > graph[111111];
vector<long long> zero[111111];
long long c[555];
long long cl[111111];
long long visited[111111];
long long mat[555][555];
void init(long long k, long long n) {
  long long sum = 0;
  for (__typeof(k) i = 0; i < k; i++) {
    for (__typeof(c[i]) j = 0; j < c[i]; j++) {
      cl[j + sum] = i;
    }
    sum += c[i];
  }
  for (__typeof(n) i = 0; i < n; i++) {
    visited[i] = 0;
  }
  for (__typeof(k) i = 0; i < k; i++)
    for (__typeof(k) j = 0; j < k; j++) {
      mat[i][j] = -1;
      if (i == j) mat[i][j] = 0;
    }
}
void dfs(long long node, long long marker) {
  if (visited[node]) return;
  visited[node] = marker;
  for (__typeof(zero[node].begin()) it = zero[node].begin();
       it != zero[node].end(); ++it) {
    long long next = *it;
    dfs(next, marker);
  }
}
int main() {
  long long n, m, k;
  cin >> n >> m >> k;
  for (__typeof(k) i = 0; i < k; i++) cin >> c[i];
  init(k, n);
  long long u, v, x;
  for (__typeof(m) i = 0; i < m; i++) {
    scanf("%lld%lld%lld", &u, &v, &x);
    u--;
    v--;
    graph[u].push_back(make_pair(v, x));
    graph[v].push_back(make_pair(u, x));
    if (x == 0) {
      zero[u].push_back(v);
      zero[v].push_back(u);
    }
  }
  for (__typeof(n) i = 0; i < n; i++) {
    if (visited[i]) continue;
    dfs(i, i + 1);
  }
  long long node = 0;
  for (__typeof(k) i = 0; i < k; i++) {
    long long color = visited[node];
    for (__typeof(node + c[i]) j = node; j < node + c[i]; j++)
      if ((color == 0) || (visited[j] != color)) {
        cout << "No" << endl;
        return 0;
      }
    node += c[i];
  }
  cout << "Yes" << endl;
  for (__typeof(n) i = 0; i < n; i++) {
    long long sz = graph[i].size();
    for (__typeof(sz) j = 0; j < sz; j++) {
      pair<long long, long long> tt = graph[i][j];
      long long u = cl[i], v = cl[tt.first], x = tt.second;
      if (mat[u][v] == -1 || mat[u][v] > x) mat[u][v] = x;
    }
  }
  for (__typeof(k) kk = 0; kk < k; kk++) {
    for (__typeof(k) ii = 0; ii < k; ii++) {
      for (__typeof(k) jj = 0; jj < k; jj++) {
        if ((mat[ii][kk] != -1) and mat[kk][jj] != -1) {
          long long candy = mat[ii][kk] + mat[kk][jj];
          if (mat[ii][jj] == -1 || mat[ii][jj] > candy) mat[ii][jj] = candy;
        }
      }
    }
  }
  for (__typeof(k) i = 0; i < k; i++) {
    for (__typeof(k) j = 0; j < k; j++) cout << mat[i][j] << " ";
    cout << endl;
  }
}
