#include <bits/stdc++.h>
using namespace std;
const int N = 105, INF = 1e5;
int n, m, st, en;
int c[2 * N][2 * N], f[2 * N][2 * N], pa[2 * N];
vector<int> adj[2 * N];
bool bfs() {
  memset(pa, -1, sizeof pa);
  pa[st] = INF;
  queue<int> q;
  q.push(st);
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = 0; i <= (int)adj[u].size() - 1; ++i) {
      int v = adj[u][i];
      if (pa[v] == -1 && c[u][v] > f[u][v]) {
        pa[v] = u;
        q.push(v);
      }
    }
  }
  return (pa[en] != -1);
}
void solve() {
  int v = en, u, res = INF;
  while (v != st) {
    u = pa[v];
    res = min(res, c[u][v] - f[u][v]);
    v = u;
  }
  v = en;
  while (v != st) {
    u = pa[v];
    f[u][v] += res;
    f[v][u] -= res;
    v = u;
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  st = 0, en = 2 * n + 1;
  int A = 0, B = 0;
  for (int i = 1; i <= n; ++i) cin >> c[st][i];
  for (int i = 1; i <= n; ++i) cin >> c[i + n][en];
  for (int i = 1; i <= n; ++i) {
    A += c[st][i], B += c[i + n][en];
    adj[i].push_back(i + n);
    c[i][i + n] = INF;
    adj[i + n].push_back(i);
    adj[st].push_back(i);
    adj[i + n].push_back(en);
  }
  if (A != B) {
    cout << "NO";
    return 0;
  }
  for (int i = 1; i <= m; ++i) {
    int u, v;
    cin >> u >> v;
    adj[u].push_back(v + n);
    adj[v + n].push_back(u);
    adj[v].push_back(u + n);
    adj[u + n].push_back(v);
    c[u][v + n] = c[v][u + n] = INF;
  }
  while (bfs()) solve();
  int res = 0;
  for (int i = 1; i <= n; ++i) res += f[st][i];
  if (res != B) {
    cout << "NO";
    return 0;
  }
  cout << "YES\n";
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) cout << f[i][j + n] << ' ';
    cout << "\n";
  }
}
