#include <bits/stdc++.h>
using namespace std;
int s, t, x, y, N, M, c[205][205], R[205][205];
int main() {
  cin >> N >> M;
  t = 2 * N + 1;
  for (int i = 1; i <= N; i++) cin >> c[s][i];
  for (int i = 1; i <= N; i++) cin >> c[N + i][t];
  for (int i = 1; i <= N; i++) c[i][N + i] = 999;
  for (int i = 1; i <= M; i++) cin >> x >> y, c[x][N + y] = c[y][N + x] = 999;
  while (true) {
    queue<int> q;
    vector<int> l(205, 0), z(205, -1);
    l[s] = 1, q.push(s);
    while (q.size()) {
      x = q.front(), q.pop();
      for (int v = 0; v <= 204; v++)
        if (c[x][v] && !l[v]) l[v] = 1, z[v] = x, q.push(v);
    }
    if (!l[t]) break;
    y = 999, x = t;
    while (z[x] >= 0) y = min(y, c[z[x]][x]), x = z[x];
    x = t;
    while (z[x] >= 0) c[z[x]][x] -= y, c[x][z[x]] += y, x = z[x];
  }
  for (int i = 1; i <= N; i++)
    if (c[s][i] || c[N + i][t]) {
      cout << "NO";
      return 0;
    }
  for (int n = 1; n <= N; n++)
    for (int v = 1; v <= N; v++) R[n][v] += c[N + v][n];
  cout << "YES\n";
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= N; j++) cout << R[i][j] << " ";
    cout << "\n";
  }
}
