#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const int debug = 0;
int n, m, cnt;
long long k, a[maxn][maxn];
int vis[maxn][maxn], par[maxn * maxn], high[maxn * maxn];
long long num[maxn * maxn];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
struct Node {
  int x, y;
  long long w;
} st[maxn * maxn], ans[maxn * maxn];
queue<Node> Q;
int findfather(int x) { return par[x] = par[x] == x ? x : findfather(par[x]); }
bool unite(int a, int b) {
  int fa = findfather(a), fb = findfather(b);
  if (fa == fb) return false;
  if (high[fa] > high[fb]) {
    par[fb] = fa;
    num[fa] += num[fb];
  } else {
    par[fa] = fb;
    num[fb] += num[fa];
    if (high[fa] == high[fb]) ++high[fb];
  }
  return true;
}
int bfs(Node now) {
  long long goal = k / a[now.x][now.y];
  long long val = a[now.x][now.y];
  if (goal > m * n) return 0;
  long long cnt = 1;
  ans[0] = {now.x, now.y};
  while (!Q.empty()) Q.pop();
  memset(vis, 0, sizeof(vis));
  Q.push(now);
  vis[now.x][now.y] = 1;
  while (!Q.empty()) {
    if (cnt == goal) break;
    now = Q.front();
    Q.pop();
    if (debug) printf("bfs %d %d\n", now.x, now.y);
    int x = now.x;
    int y = now.y;
    for (int i = 0; i < 4; i++) {
      int nx = x + dx[i];
      int ny = y + dy[i];
      if (nx <= 0 || nx > n || ny <= 0 || ny > m || a[nx][ny] < val ||
          vis[nx][ny])
        continue;
      vis[nx][ny] = 1;
      Q.push({nx, ny, a[nx][ny]});
      ans[cnt++] = {nx, ny};
      if (cnt == goal) break;
    }
  }
  if (cnt == goal) {
    for (int i = 0; i < cnt; i++) {
      int x = ans[i].x;
      int y = ans[i].y;
      a[x][y] = -1;
    }
    puts("YES");
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        if (a[i][j] != -1)
          printf("0 ");
        else
          printf("%lld ", val);
      }
      puts("");
    }
    return 1;
  }
  return 0;
}
bool cmp(Node n1, Node n2) { return n1.w > n2.w; }
int id(int x, int y) { return (x - 1) * m + y - 1; }
int main() {
  scanf("%d%d%lld", &n, &m, &k);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      scanf("%lld", &a[i][j]);
      st[cnt++] = {i, j, a[i][j]};
    }
  }
  for (int i = 0; i < cnt; i++) {
    par[i] = i;
    num[i] = 1;
  }
  sort(st, st + cnt, cmp);
  for (int i = 0; i < cnt; i++) {
    int x = st[i].x;
    int y = st[i].y;
    long long w = st[i].w;
    if (debug) printf("\n\n x = %d y = %d w = %lld\n", x, y, st[i].w);
    for (int j = 0; j < 4; j++) {
      int nx = x + dx[j];
      int ny = y + dy[j];
      if (nx <= 0 || nx > n || ny <= 0 || ny > m) continue;
      if (a[nx][ny] >= w) {
        if (debug) printf("unite %d %d %d %d\n", x, y, nx, ny);
        unite(id(x, y), id(nx, ny));
        if (debug) printf("numfa = %lld\n", num[findfather(id(x, y))]);
      }
    }
    if (k % w) continue;
    if (num[findfather(id(x, y))] >= k / w) {
      bfs(st[i]);
      return 0;
    }
  }
  puts("NO");
  return 0;
}
