#include <bits/stdc++.h>
using namespace std;
template <typename T>
void print(const T& v) {
  for (int i = 0; i < v.size(); ++i) {
    for (int j = 0; j < v[i].size(); ++j) cout << v[i][j] << " ";
    cout << endl;
  }
}
void output(const vector<vector<int> > grid) {
  cout << "YES" << endl;
  for (int i = 0; i < grid.size(); ++i) {
    for (int j = 0; j < grid[0].size(); ++j) cout << grid[i][j] + 1 << " ";
    cout << endl;
  }
}
void fill_rows(vector<vector<int> >& grid, const vector<vector<bool> >& hor,
               vector<vector<bool> >& ver) {
  int up;
  for (int i = 0; i < grid.size(); ++i) {
    for (int j = 0; j + 1 < grid[0].size(); ++j) {
      if (hor[i][j]) {
        grid[i][j + 1] = grid[i][j];
      } else
        grid[i][j + 1] = 1 - grid[i][j];
    }
    if (i == 0) continue;
    up = 0;
    for (int j = 0; j < grid[0].size(); ++j) {
      if (ver[i - 1][j] && grid[i - 1][j] == grid[i][j]) ++up;
      if (!ver[i - 1][j] && grid[i - 1][j] != grid[i][j]) ++up;
    }
    if (up < (grid[0].size() + 1) / 2) {
      for (int j = 0; j < grid[0].size(); ++j) grid[i][j] = 1 - grid[i][j];
    }
  }
}
void fill_cols(vector<vector<int> >& grid, const vector<vector<bool> >& hor,
               const vector<vector<bool> >& ver) {
  int left;
  for (int j = 0; j < grid[0].size(); ++j) {
    for (int i = 0; i + 1 < grid.size(); ++i) {
      if (ver[i][j])
        grid[i + 1][j] = grid[i][j];
      else
        grid[i + 1][j] = 1 - grid[i][j];
    }
    if (j == 0) continue;
    left = 0;
    for (int i = 0; i < grid.size(); ++i) {
      if (hor[i][j - 1] && grid[i][j - 1] == grid[i][j]) ++left;
      if (!hor[i][j - 1] && grid[i][j - 1] != grid[i][j]) ++left;
    }
    if (left < (grid.size() + 1) / 2) {
      for (int i = 0; i < grid.size(); ++i) grid[i][j] = 1 - grid[i][j];
    }
  }
}
int main(int argc, char* argv[]) {
  int h, w, k;
  string s;
  cin >> h >> w >> k;
  k = min(5, k);
  vector<vector<int> > grid(h, vector<int>(w, 0));
  vector<vector<bool> > hor(h, vector<bool>(w - 1, false));
  vector<vector<bool> > ver(h - 1, vector<bool>(w, false));
  int eq = 0;
  for (int i = 0; i < 2 * h - 1; ++i) {
    cin >> s;
    if (i % 2 == 0)
      for (int j = 0; j < s.size(); ++j) {
        hor[i / 2][j] = (s[j] == 'E');
        if (s[j] == 'E') ++eq;
      }
    else {
      for (int j = 0; j < w; ++j) {
        ver[i / 2][j] = (s[j] == 'E');
        if (s[j] == 'E') ++eq;
      }
    }
  }
  if (k == 1) {
    int suc = h * (w - 1) + w * (h - 1);
    if (4 * eq >= 3 * suc)
      output(grid);
    else
      cout << "NO" << endl;
    return 0;
  }
  if (h * (w - 1) >= w * (h - 1))
    fill_rows(grid, hor, ver);
  else
    fill_cols(grid, hor, ver);
  output(grid);
}
