#include <bits/stdc++.h>
const double PI = acos(-1.0);
using namespace std;
int setb(int n, int pos) { return n = n | (1 << pos); }
int resb(int n, int pos) { return n = n & ~(1 << pos); }
bool checkb(long long n, long long pos) { return (bool)(n & (1ll << pos)); }
long long bigmod(long long b, long long p, long long m) {
  if (p == 0) return 1;
  long long ret = bigmod(b, p / 2, m);
  ret = (ret * ret) % m;
  if (p & 1) ret = (ret * b) % m;
  return ret;
}
int n, m, actrow[105], actcol[105];
int g[105][105];
int row[105], col[105];
int ans[105][105];
void the_end() {
  puts("NO");
  exit(0);
}
bool solve() {
  int r = 0, c = 0;
  for (int i = 1; i <= n; i++) r ^= row[i];
  for (int i = 1; i <= m; i++) c ^= col[i];
  if (r != c) return false;
  memset(g, 0, sizeof(g));
  int cnt = 0;
  for (int j = 1; j <= m; j++)
    if (col[j]) g[1][j] = 1, cnt ^= 1;
  int my = 0;
  if (row[1] != cnt) g[1][1] ^= 1, my ^= 1;
  for (int i = 2; i <= n; i++)
    if (row[i]) g[i][1] ^= 1, my ^= 1;
  assert(my == 0);
}
void super_solve() {
  for (int k = 0; k < 31; k++) {
    for (int i = 1; i <= n; i++) {
      if (checkb(actrow[i], k))
        row[i] = 1;
      else
        row[i] = 0;
    }
    for (int i = 1; i <= m; i++) {
      if (checkb(actcol[i], k))
        col[i] = 1;
      else
        col[i] = 0;
    }
    if (solve()) {
      for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
          ans[i][j] |= (g[i][j] << k);
        }
      }
    } else
      the_end();
  }
  puts("YES");
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (j > 1) printf(" ");
      printf("%d", ans[i][j]);
    }
    printf("\n");
  }
}
int main() {
  int i;
  scanf("%d %d", &n, &m);
  for (i = 1; i <= n; i++) scanf("%d", &actrow[i]);
  for (i = 1; i <= m; i++) scanf("%d", &actcol[i]);
  super_solve();
  return 0;
}
