#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T &x) {
  x = 0;
  int f = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = -1;
  for (; isdigit(c); c = getchar()) x = x * 10 + c - 48;
  x *= f;
}
int mx[40][110][110];
int a[40][110], b[40][110];
int ans[110][110], n, m;
int main() {
  read(n);
  read(m);
  for (int i = 1; i <= n; ++i) {
    int x, k = 0;
    read(x);
    while (x) {
      a[k][i] = x & 1;
      x >>= 1;
      k++;
    }
  }
  for (int i = 1; i <= m; ++i) {
    int x, k = 0;
    read(x);
    while (x) {
      b[k][i] = x & 1;
      x >>= 1;
      k++;
    }
  }
  for (int k = 0; k <= 30; ++k) {
    int nn = 0, mm = 0;
    for (int i = 1; i <= n; ++i) nn += a[k][i];
    for (int i = 1; i <= m; ++i) mm += b[k][i];
    if ((nn - mm) % 2 != 0) {
      cout << "NO" << endl;
      exit(0);
    } else {
      for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j) {
          if (j == m && a[k][i])
            mx[k][i][j] = 1, a[k][i] = (!a[k][i]), b[k][j] = (!b[k][j]);
          if (i == n && b[k][j])
            mx[k][i][j] = 1, a[k][i] = (!a[k][i]), b[k][j] = (!b[k][j]);
          if (j != m && i != n && (a[k][i] || b[k][j]))
            mx[k][i][j] = 1, a[k][i] = (!a[k][i]), b[k][j] = (!b[k][j]);
        }
    }
    for (int i = 1; i <= n; ++i)
      for (int j = 1; j <= m; ++j) ans[i][j] += mx[k][i][j] * (1 << k);
  }
  cout << "YES" << endl;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) printf("%d ", ans[i][j]);
    printf("\n");
  }
  return 0;
}
