#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int inf = 0x3f3f3f3f;
const long long llf = 0x3f3f3f3f3f3f3f3f;
const int maxn = (int)1e6 + 7;
const double eps = 1e-10;
const long long mod1 = (int)1e9 + 7;
const long long mod2 = 998244353;
const long long has = 99959;
const int dx[] = {0, 1, 0, -1};
const int dy[] = {1, 0, -1, 0};
int n, m;
int x[105], y[105];
int ans[105][105];
int b[105];
int main() {
  std::ios::sync_with_stdio(false);
  scanf("%d%d", &n, &m);
  int XOR = 0;
  memset(ans, 0, sizeof(ans));
  memset(b, 0, sizeof(b));
  for (int i = 0; i < n; i++) {
    scanf("%d", &x[i]);
    ;
    b[i]++;
    XOR ^= x[i];
  }
  for (int i = 0; i < m; i++) {
    scanf("%d", &y[i]);
    ;
    b[i]--;
    XOR ^= y[i];
  }
  if (XOR != 0) {
    printf("NO\n");
    return 0;
  }
  ans[0][0] = y[0];
  for (int i = 1; i < n; i++) {
    ans[0][0] ^= x[i];
  }
  for (int i = 1; i <= m; i++) {
    ans[0][i] = y[i];
  }
  for (int i = 1; i <= n; i++) {
    ans[i][0] = x[i];
  }
  int now = 0;
  for (int i = 0; i < m; i++) {
    now ^= ans[0][i];
  }
  if (now != x[0]) {
    printf("NO\n");
    return 0;
  }
  printf("YES\n");
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      printf("%d ", ans[i][j]);
    }
    printf("\n");
  }
  return 0;
}
