#include <bits/stdc++.h>   using namespace std;   template <typename T>   void read(T &x) {     x = 0;     int f = 1;     char c = getchar();     for (; !isdigit(c); c = getchar())       if (c ==  - ) f = -1;     for (; isdigit(c); c = getchar()) x = x * 10 + c - 48;     x *= f;   }   int mx[40][110][110];   int a[40][110], b[40][110];   int ans[110][110], n, m;   int main() {     read(n);     read(m);     for (int i = 1; i <= n; ++i) {       int x, k = 0;       read(x);       while (x) {         a[k][i] = x & 1;         x >>= 1;         k++;       }     }     for (int i = 1; i <= m; ++i) {       int x, k = 0;       read(x);       while (x) {         b[k][i] = x & 1;         x >>= 1;         k++;       }     }     for (int k = 0; k <= 30; ++k) {       int nn = 0, mm = 0;       for (int i = 1; i <= n; ++i) nn += a[k][i];       for (int i = 1; i <= m; ++i) mm += b[k][i];       if ((nn - mm) % 2 != 0) {         cout <<  NO  << endl;         exit(0);       } else {         for (int i = 1; i <= n; ++i)           for (int j = 1; j <= m; ++j) {             if (j == m && a[k][i])               mx[k][i][j] = 1, a[k][i] = (!a[k][i]), b[k][j] = (!b[k][j]);             if (i == n && b[k][j])               mx[k][i][j] = 1, a[k][i] = (!a[k][i]), b[k][j] = (!b[k][j]);             if (j != m && i != n && (a[k][i] || b[k][j]))               mx[k][i][j] = 1, a[k][i] = (!a[k][i]), b[k][j] = (!b[k][j]);           }       }       for (int i = 1; i <= n; ++i)         for (int j = 1; j <= m; ++j) ans[i][j] += mx[k][i][j] * (1 << k);     }     cout <<  YES  << endl;     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) printf( %d  , ans[i][j]);       printf(  n );     }     return 0;   }   