#include <bits/stdc++.h>
using namespace std;
inline void rd(int &res) {
  res = 0;
  char c;
  while (c = getchar(), c < '0')
    ;
  do {
    res = (res << 1) + (res << 3) + (c ^ 48);
  } while (c = getchar(), c >= '0');
}
inline void print(int k) {
  if (k == 0) return;
  print(k / 10);
  putchar((k % 10) ^ 48);
}
inline void sc(int k) {
  print(k);
  if (k == 0) putchar('0');
  putchar(' ');
}
inline void MIN(int &a, int b) {
  if (a == -1 || a > b) a = b;
}
inline void MAX(int &a, int b) {
  if (a < b) a = b;
}
const int M = 2001;
int A[M][M], id[M][M], fa[M * M], sz[M * M];
bool mark[M][M];
int n, m, tot;
long long s, num, now;
int rx[] = {0, 1, 0, -1}, ry[] = {1, 0, -1, 0};
struct node {
  int x, y, v;
  bool operator<(const node &a) const { return v < a.v; }
} C[M * M];
inline void input() {
  int i, j, k;
  scanf("%d%d%lld", &n, &m, &s);
  for (i = 0; i <= n - 1; ++i)
    for (j = 0; j <= m - 1; ++j) {
      rd(A[i][j]);
      fa[tot] = tot;
      sz[tot] = 1;
      C[tot++] = (node){i, j, A[i][j]};
    }
  sort(C, C + tot);
  for (i = 0; i <= tot - 1; ++i) id[C[i].x][C[i].y] = i;
}
inline bool check(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m; }
inline int getfa(int x) {
  if (x != fa[x]) fa[x] = getfa(fa[x]);
  return fa[x];
}
inline void combine(int x, int y) {
  y = getfa(y);
  if (x != y) {
    sz[x] += sz[y];
    fa[y] = x;
  }
}
inline void dfs(int x, int y, int v) {
  num--;
  mark[x][y] = 1;
  if (num == 0) return;
  int i, nx, ny;
  for (i = 0; i <= 3; ++i) {
    nx = x + rx[i];
    ny = y + ry[i];
    if (check(nx, ny) && !mark[nx][ny] && A[nx][ny] >= v) {
      dfs(nx, ny, v);
      if (num == 0) return;
    }
  }
}
inline void prinf(int x) {
  int i, j;
  puts("YES");
  for (i = 0; i <= n - 1; ++i) {
    for (j = 0; j <= m - 1; ++j) {
      if (mark[i][j])
        sc(x);
      else
        sc(0);
    }
    puts("");
  }
}
inline void solve() {
  int i, j, x, y;
  for (i = tot - 1; i >= 0; --i) {
    if (!C[i].v) break;
    for (j = 0; j <= 3; ++j) {
      x = C[i].x + rx[j];
      y = C[i].y + ry[j];
      if (!check(x, y) || id[x][y] < i) continue;
      combine(i, id[x][y]);
    }
    num = s / C[i].v;
    if (s % C[i].v == 0 && (long long)sz[i] >= num) {
      dfs(C[i].x, C[i].y, C[i].v);
      prinf(C[i].v);
      return;
    }
  }
  puts("NO");
}
int main() {
  input();
  solve();
  return 0;
}
