#include <bits/stdc++.h>
using namespace std;
int a[1002][1002], par[1000002], vis[1002][1002], size[1000002], B[1002][1002];
std::vector<pair<int, pair<int, int> > > v;
int n, m;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
long long need;
int el;
int find(int x) {
  if (x == par[x]) return x;
  return (par[x] = find(par[x]));
}
void __union(int x, int y) {
  int p1 = find(x);
  int p2 = find(y);
  if (p1 != p2) {
    par[p2] = p1;
    size[p1] += size[p2];
  }
}
int check(int x, int y) {
  if (x >= 1 && x <= n && y >= 1 && y <= m) return 1;
  return 0;
}
void dfs(int x, int y) {
  if (vis[x][y]) return;
  vis[x][y] = 1;
  for (int i = 0; i < 4; ++i) {
    int nx = x + dx[i];
    int ny = y + dy[i];
    if (check(nx, ny) && a[nx][ny] >= a[x][y] && vis[nx][ny])
      __union(par[m * (x - 1) + y], par[m * (nx - 1) + ny]);
  }
}
void dfs2(int x, int y) {
  if (vis[x][y]) return;
  if (need == 0) return;
  B[x][y] = el;
  need--;
  vis[x][y] = 1;
  for (int i = 0; i < 4; ++i) {
    int nx = x + dx[i];
    int ny = y + dy[i];
    if (check(nx, ny) && a[nx][ny] >= el) dfs2(nx, ny);
  }
}
int main() {
  long long k;
  cin >> n >> m >> k;
  int i, j;
  for (i = (int)1; i < (int)n + 1; i++) {
    for (j = (int)1; j < (int)m + 1; j++) {
      scanf("%d", &a[i][j]);
      v.push_back(make_pair(a[i][j], make_pair(i, j)));
      int first = m * (i - 1) + j;
      par[first] = first;
      size[first] = 1;
    }
  }
  sort(v.begin(), v.end());
  reverse(v.begin(), v.end());
  int ok = 0;
  pair<int, int> st;
  for (i = (int)0; i < (int)v.size(); i++) {
    int x = v[i].second.first;
    int y = v[i].second.second;
    dfs(x, y);
    int p1 = find(m * (x - 1) + y);
    if (k % a[x][y] != 0) continue;
    need = k / a[x][y];
    if (size[p1] >= need) {
      ok = 1;
      el = v[i].first;
      st = make_pair(x, y);
      break;
    }
  }
  if (!ok) {
    printf("NO\n");
    return 0;
  }
  for (i = (int)1; i < (int)n + 1; i++) {
    for (j = (int)1; j < (int)m + 1; j++) {
      vis[i][j] = 0;
    }
  }
  printf("YES\n");
  dfs2(st.first, st.second);
  for (i = (int)1; i < (int)n + 1; i++) {
    for (j = (int)1; j < (int)m + 1; j++) {
      printf("%d ", B[i][j]);
    }
    printf("\n");
  }
  return 0;
}
