#include <bits/stdc++.h>
using namespace std;
int n, m, K, N, E;
int map1[1100][1100], map2[1100][1100];
char a[1100][1100], b[1100][1100];
void update(char c) {
  if (c == 'E')
    E++;
  else
    N++;
}
void solve() {
  int i, j, k;
  scanf("%d%d%d", &n, &m, &K);
  if (K > 1) K = 2;
  N = 0, E = 0;
  for (i = 1; i <= n - 1; i++) {
    getchar();
    for (j = 2; j <= m; j++) {
      scanf("%c", &a[i][j]);
      update(a[i][j]);
    }
    getchar();
    for (j = 1; j <= m; j++) scanf("%c", &b[i + 1][j]), update(b[i + 1][j]);
  }
  getchar();
  for (j = 2; j <= m; j++) scanf("%c", &a[n][j]), update(a[n][j]);
  if (K == 1) {
    if (4 * E >= 3 * (E + N)) {
      puts("YES");
      for (i = 1; i <= n; i++) {
        for (j = 1; j <= m; j++) printf("1 ");
        puts("");
      }
    } else
      puts("NO");
    return;
  }
  int tmp1 = 0, tmp2 = 0;
  memset(map1, 0, sizeof(map1));
  for (i = 1; i <= n; i++) {
    for (j = 2; j <= m; j++) {
      if (a[i][j] == 'E')
        map1[i][j] = map1[i][j - 1];
      else
        map1[i][j] = map1[i][j - 1] ^ 1;
    }
    if (i == 1) continue;
    int wro_Count = 0;
    for (j = 1; j <= m; j++) {
      if (map1[i][j] == map1[i - 1][j] && b[i][j] == 'N') wro_Count++;
      if (map1[i][j] != map1[i - 1][j] && b[i][j] == 'E') wro_Count++;
    }
    if (wro_Count > m / 2) {
      for (j = 1; j <= m; j++) map1[i][j] ^= 1;
      tmp1 += m - wro_Count;
    } else
      tmp1 += wro_Count;
  }
  memset(map2, 0, sizeof(map2));
  for (j = 1; j <= m; j++) {
    for (i = 2; i <= n; i++) {
      if (b[i][j] == 'E')
        map2[i][j] = map2[i - 1][j];
      else
        map2[i][j] = map2[i - 1][j] ^ 1;
    }
    if (j == 1) continue;
    int wro_Count = 0;
    for (i = 1; i <= n; i++) {
      if (map2[i][j] == map2[i][j - 1] && a[i][j] == 'N') wro_Count++;
      if (map2[i][j] != map2[i][j - 1] && a[i][j] == 'E') wro_Count++;
    }
    if (wro_Count > n / 2) {
      for (i = 1; i <= n; i++) map2[i][j] ^= 1;
      tmp2 += n - wro_Count;
    } else
      tmp2 += wro_Count;
  }
  puts("YES");
  if (tmp1 < tmp2) {
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++) {
        printf("%d ", map1[i][j] + 1);
      }
      puts("");
    }
  } else {
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++) {
        printf("%d ", map2[i][j] + 1);
      }
      puts("");
    }
  }
}
int main() {
  solve();
  return 0;
}
