#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
int n, m, k, c[505], cls[100005];
vector<vector<pair<int, int> > > g;
queue<int> Q;
int vis[100005];
int d[505][505];
void solve() {
  memset(cls, -1, sizeof(cls));
  memset(vis, 0, sizeof(vis));
  for (int s = 0; s < n; s++) {
    if (!vis[s]) {
      Q = queue<int>();
      Q.push(s);
      vis[s] = true;
      while (!Q.empty()) {
        int u = Q.front();
        Q.pop();
        cls[u] = s;
        for (size_t j = 0; j < g[u].size(); j++) {
          int v = g[u][j].first;
          int w = g[u][j].second;
          if (w == 0 && !vis[v]) {
            Q.push(v);
            vis[v] = true;
          }
        }
      }
    }
  }
  int id = 0;
  for (int i = 0; i < k; i++) {
    int t = cls[id];
    for (int j = id; j < id + c[i]; j++) {
      if (t != cls[j]) {
        cout << "No" << endl;
        return;
      }
      cls[j] = i;
    }
    id += c[i];
  }
  int inf = 1000000005;
  for (int i = 0; i < k; i++) {
    for (int j = 0; j < k; j++) {
      d[i][j] = inf;
    }
    d[i][i] = 0;
  }
  for (int i = 0; i < n; i++) {
    for (size_t j = 0; j < g[i].size(); j++) {
      int u = i;
      int v = g[i][j].first;
      int w = g[i][j].second;
      int clsU = cls[u];
      int clsV = cls[v];
      if (clsU != clsV && w < d[clsU][clsV]) {
        d[clsU][clsV] = d[clsV][clsU] = w;
      }
    }
  }
  for (int l = 0; l < k; l++) {
    for (int i = 0; i < k; i++) {
      for (int j = 0; j < k; j++) {
        int t = d[i][l] + d[l][j];
        if (t < d[i][j]) {
          d[i][j] = t;
        }
      }
    }
  }
  cout << "Yes" << '\n';
  for (int i = 0; i < k; i++) {
    for (int j = 0; j < k; j++) {
      if (d[i][j] == inf) {
        d[i][j] = -1;
      }
      cout << d[i][j] << ' ';
    }
    cout << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  while (cin >> n >> m >> k) {
    for (int i = 0; i < k; i++) {
      cin >> c[i];
    }
    g = vector<vector<pair<int, int> > >(n);
    for (int i = 0; i < m; i++) {
      int u, v, x;
      cin >> u >> v >> x;
      u--;
      v--;
      g[u].push_back(make_pair(v, x));
      g[v].push_back(make_pair(u, x));
    }
    solve();
  }
}
