#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000 + 10;
int h, w, k;
int ans[MAX][MAX];
char hang[MAX][MAX], lie[MAX][MAX];
int main() {
  scanf("%d%d%d\n", &h, &w, &k);
  int i, j, can = 0;
  for ((i) = (1); (i) <= (2 * h - 1); ++(i)) {
    char Q[MAX];
    scanf("%s", Q + 1);
    if (i % 2 == 1)
      for ((j) = (1); (j) <= (w - 1); ++(j)) {
        hang[(i + 1) / 2][j] = Q[j];
        if (hang[(i + 1) / 2][j] == 'E') ++can;
      }
    else
      for ((j) = (1); (j) <= (w); ++(j)) {
        lie[j][i / 2] = Q[j];
        if (lie[j][i / 2] == 'E') ++can;
      }
  }
  if (k == 1) {
    if (can * 4 < 3 * ((w - 1) * h + (h - 1) * w))
      printf("NO\n");
    else {
      printf("YES\n");
      for ((i) = (1); (i) <= (h); ++(i)) {
        for ((j) = (1); (j) <= (w); ++(j)) printf("1 ");
        printf("\n");
      }
    }
  } else {
    int flag = 0;
    if ((w - 1) * h < (h - 1) * w) {
      flag = 1;
      swap(hang, lie);
      swap(h, w);
    }
    for ((i) = (1); (i) <= (h); ++(i)) {
      ans[i][1] = 0;
      int res = 0;
      for ((j) = (2); (j) <= (w); ++(j)) {
        if (hang[i][j - 1] == 'E')
          ans[i][j] = ans[i][j - 1];
        else
          ans[i][j] = !ans[i][j - 1];
      }
      if (i != 1) {
        for ((j) = (1); (j) <= (w); ++(j))
          res += ((ans[i][j] == ans[i - 1][j]) == (lie[j][i - 1] == 'E'));
        if (res * 2 < w)
          for ((j) = (1); (j) <= (w); ++(j)) ans[i][j] ^= 1;
      }
    }
    printf("YES\n");
    if (!flag)
      for ((i) = (1); (i) <= (h); ++(i)) {
        for ((j) = (1); (j) <= (w); ++(j)) printf("%d ", ans[i][j] + 1);
        printf("\n");
      }
    else
      for ((i) = (1); (i) <= (w); ++(i)) {
        for ((j) = (1); (j) <= (h); ++(j)) printf("%d ", ans[j][i] + 1);
        printf("\n");
      }
  }
  return 0;
}
