#include <bits/stdc++.h>
using namespace std;
int n, s, t;
int c[205][205], f[205][205], d[205];
int q[205], ptr[205];
bool bfs() {
  int qh = 0, qt = 0;
  q[qt++] = s;
  memset(d, -1, n * sizeof(int));
  d[s] = 0;
  while (qh < qt) {
    int u = q[qh++];
    for (int i = 0; i < n; ++i) {
      if (d[i] == -1 && f[u][i] < c[u][i]) {
        q[qt++] = i;
        d[i] = d[u] + 1;
      }
    }
  }
  return d[t] != -1;
}
int dfs(int u, int flow) {
  if (!flow) return 0;
  if (u == t) return flow;
  for (int &to = ptr[u]; to < n; ++to) {
    if (d[to] != d[u] + 1) continue;
    int pushed = dfs(to, min(flow, c[u][to] - f[u][to]));
    if (pushed) {
      f[u][to] += pushed;
      f[to][u] -= pushed;
      return pushed;
    }
  }
  return 0;
}
int dinic() {
  int flow = 0;
  while (true) {
    if (!bfs()) break;
    memset(ptr, 0, n * sizeof(int));
    while (int pushed = dfs(s, 1LL << 30)) flow += pushed;
  }
  return flow;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  int m;
  cin >> n >> m;
  int stsum = 0;
  for (int i = 1; i <= (int)n; ++i) {
    cin >> c[0][2 * i];
    c[2 * i][2 * i + 1] = c[0][2 * i];
    stsum += c[0][2 * i];
  }
  int sum = 0;
  for (int i = 1; i <= (int)n; ++i) {
    cin >> c[2 * i][1];
    sum += c[2 * i][1];
  }
  for (int i = 0; i < (int)m; ++i) {
    int x, y;
    cin >> x >> y;
    c[2 * x + 1][2 * y] = 1 << 30;
    c[2 * y + 1][2 * x] = 1 << 30;
  }
  s = 0, t = 1, n = 2 * n + 2;
  int res = dinic();
  assert(res <= sum);
  if (res == sum && sum == stsum) {
    cout << "YES" << '\n';
    for (int i = 1; i <= n / 2 - 1; ++i) {
      for (int j = 1; j <= n / 2 - 1; ++j) {
        if (i == j)
          cout << c[0][2 * i] - f[2 * i][2 * i + 1] << ' ';
        else
          cout << max(f[2 * i + 1][2 * j], 0) << ' ';
      }
      cout << '\n';
    }
  } else {
    cout << "NO" << '\n';
  }
}
