#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) x = x * 10 + (ch ^ 48), ch = getchar();
  return x * f;
}
void Write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) Write(x / 10);
  putchar(x % 10 + 48);
}
inline void writes(long long x) { Write(x), putchar(' '); }
inline void Writes(long long x) { Write(x), putchar('\n'); }
long long n, m;
long long mat[32][110][110];
bool row[32][110], col[32][110];
bool trow[32][110], tcol[32][110];
signed main() {
  n = read(), m = read();
  for (long long i = 1; i <= n; ++i) {
    long long now = read();
    for (long long j = 0; j < 32; ++j) row[j][i] = ((now >> j) & 1);
  }
  for (long long i = 1; i <= m; ++i) {
    long long now = read();
    for (long long j = 0; j < 32; ++j) col[j][i] = ((now >> j) & 1);
  }
  for (long long loc = 0; loc < 32; ++loc) {
    for (long long i = 1; i <= n - 1; ++i) {
      if (trow[loc][i] != row[loc][i])
        mat[loc][i][m] = 1;
      else
        mat[loc][i][m] = 0;
      tcol[loc][m] ^= mat[loc][i][m];
    }
    for (long long j = 1; j <= m - 1; ++j) {
      if (tcol[loc][j] != col[loc][j])
        mat[loc][n][j] = 1;
      else
        mat[loc][n][j] = 0;
      trow[loc][n] ^= mat[loc][n][j];
    }
    if ((col[loc][m] ^ tcol[loc][m]) != (trow[loc][n] ^ row[loc][n])) {
      puts("NO");
      return 0;
    } else
      mat[loc][n][m] = col[loc][m] ^ tcol[loc][m];
  }
  puts("YES");
  for (long long i = 1; i <= n; ++i, puts(""))
    for (long long j = 1; j <= m; ++j) {
      long long ans = 0;
      for (long long loc = 0; loc < 32; ++loc) ans += (mat[loc][i][j] << loc);
      writes(ans);
    }
  return 0;
}
