#include <bits/stdc++.h>
using namespace std;
int n, m;
unsigned int a[102], b[102];
unsigned int ans[102][102];
stack<int> A, B;
int main() {
  scanf("%d %d", &n, &m);
  int i, j, k;
  int p, q;
  bool flag;
  unsigned int cnt = 0;
  for (i = 0; i < n; i++) scanf("%d", &a[i]), cnt ^= a[i];
  for (i = 0; i < m; i++) scanf("%d", &b[i]), cnt ^= b[i];
  if (cnt) {
    printf("NO");
    return 0;
  }
  puts("YES");
  for (k = 0; k <= 30; k++) {
    for (i = 0; i < n; i++)
      if ((a[i] / (1 << k)) % 2) A.push(i);
    for (i = 0; i < m; i++)
      if ((b[i] / (1 << k)) % 2) B.push(i);
    flag = (A.size() > B.size()) ? 1 : 0;
    if (flag) {
      while (!B.empty()) {
        p = A.top(), q = B.top(), A.pop(), B.pop();
        ans[p][q] ^= 1 << k;
      }
      while (!A.empty()) {
        p = A.top(), A.pop(), q = A.top(), A.pop();
        ans[p][0] ^= 1 << k, ans[q][0] ^= 1 << k;
      }
    } else {
      while (!A.empty()) {
        p = A.top(), q = B.top(), A.pop(), B.pop();
        ans[p][q] ^= 1 << k;
      }
      while (!B.empty()) {
        p = B.top(), B.pop(), q = B.top(), B.pop();
        ans[0][p] ^= 1 << k, ans[0][q] ^= 1 << k;
      }
    }
  }
  for (i = 0; i < n; i++, puts(""))
    for (j = 0; j < m; j++) printf("%d ", ans[i][j]);
}
