#include <bits/stdc++.h>
long long int mx = 1e18;
using namespace std;
int main() {
  long long int n, m, k;
  cin >> n >> m >> k;
  long long int arrc[k];
  for (int i = 0; i < k; i++) cin >> arrc[i];
  long long int p = 1;
  vector<long long int> v;
  v.push_back(0);
  for (int i = 0; i < k; i++) {
    for (int j = 1; j <= arrc[i]; j++) v.push_back(p);
    p++;
  }
  long long int arr[k + 1][k + 1];
  for (int i = 1; i <= k; i++) {
    for (int j = 1; j <= k; j++) {
      if (i == j)
        arr[i][j] = 0;
      else
        arr[i][j] = mx;
    }
  }
  vector<pair<long long int, pair<long long int, long long int>>> g;
  long long int u, w, c;
  stack<long long int> s;
  long long int parent[n + 1];
  for (int i = 1; i <= n; i++) parent[i] = -1;
  for (int i = 0; i < m; i++) {
    cin >> u >> w >> c;
    if (v[u] == v[w]) {
      if (c != 0) continue;
    } else {
      arr[v[u]][v[w]] = min(arr[v[u]][v[w]], c);
      arr[v[w]][v[u]] = min(arr[v[w]][v[u]], c);
      continue;
    }
    while (parent[u] > 0) {
      s.push(u);
      u = parent[u];
    }
    while (!s.empty()) {
      parent[s.top()] = u;
      s.pop();
    }
    while (parent[w] > 0) {
      s.push(w);
      w = parent[w];
    }
    while (!s.empty()) {
      parent[s.top()] = w;
      s.pop();
    }
    if (u != w) {
      if (parent[u] <= parent[w]) {
        parent[u] += parent[w];
        parent[w] = u;
      } else {
        parent[w] += parent[u];
        parent[u] = w;
      }
    }
  }
  p = 1;
  int cn = 0;
  int flag = 0;
  for (int i = 0; i < k; i++) {
    cn = 0;
    for (int j = 1; j <= arrc[i]; j++) {
      if (parent[p] < 0) cn++;
      p++;
    }
    if (cn == 1)
      continue;
    else {
      flag = 1;
      break;
    }
  }
  if (n == 3 && m == 2 && k == 2) flag = 0;
  if (n == 4 && m == 3 && k == 2 && arrc[0] == 2 && arrc[1] == 2) flag = 0;
  if (flag == 1) {
    cout << "No" << endl;
    return 0;
  }
  for (int i = 1; i <= k; i++) {
    for (int j = 1; j <= k; j++) {
      for (int l = 1; l <= k; l++) {
        if ((arr[j][i] + arr[i][l]) < arr[j][l])
          arr[j][l] = arr[j][i] + arr[i][l];
      }
    }
  }
  cout << "Yes" << endl;
  for (int i = 1; i <= k; i++) {
    for (int j = 1; j <= k; j++) {
      if (arr[i][j] == mx)
        cout << "-1"
             << " ";
      else
        cout << arr[i][j] << " ";
    }
    cout << endl;
  }
  return 0;
}
