#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n, m, a[N], b[N], grid[N][N];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  for (int i = 0; i < m; i++) scanf("%d", &b[i]);
  vector<int> v1, v2;
  for (int i = 30; i >= 0; i--) {
    v1.clear();
    v2.clear();
    for (int j = 0; j < n; j++)
      if (((a[j] >> i) & 1) == 1) v1.push_back(j);
    for (int j = 0; j < m; j++) {
      if (((b[j] >> i) & 1) == 1) {
        v2.push_back(j);
      }
    }
    if ((int)v1.size() % 2 != (int)v2.size() % 2) {
      puts("NO");
      return 0;
    }
    int j = 0, k = 0, val, val2;
    while (j < (int)v1.size() || k < (int)v2.size()) {
      if (j == (int)v1.size())
        val = 0;
      else
        val = v1[j++];
      if (k == (int)v2.size())
        val2 = 0;
      else
        val2 = v2[k++];
      grid[val][val2] |= (1 << i);
    }
  }
  puts("YES");
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (j) putchar(' ');
      printf("%d", grid[i][j]);
    }
    puts("");
  }
  return 0;
}
