#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1010;
const int kombX[4] = {0, 0, -1, 1};
const int kombY[4] = {1, -1, 0, 0};
int n, m;
long long int sum;
vector<pair<int, pair<int, int> > > v;
int mat[MAXN][MAXN];
int bio[MAXN][MAXN], velicina[MAXN][MAXN];
int rj[MAXN][MAXN];
pair<int, int> tata[MAXN][MAXN];
pair<int, int> union_find(pair<int, int> p) {
  if (pair<int, int>(tata[p.first][p.second].first,
                     tata[p.first][p.second].second) == p)
    return p;
  return tata[p.first][p.second] = union_find(tata[p.first][p.second]);
}
void spoji(pair<int, int> a, pair<int, int> b) {
  a = union_find(a);
  b = union_find(b);
  if (a == b) return;
  if (rand() % 2) {
    tata[a.first][a.second] = b;
    velicina[b.first][b.second] += velicina[a.first][a.second];
  } else {
    tata[b.first][b.second] = a;
    velicina[a.first][a.second] += velicina[b.first][b.second];
  }
}
int vani(int x, int y) {
  if (x < 0 || y < 0 || x >= n || y >= m) return 1;
  return 0;
}
int brojac;
void dfs(pair<int, int> p, int koliko, pair<int, int> u, int val) {
  int x = p.first, y = p.second;
  if (vani(x, y)) return;
  if (brojac >= koliko) return;
  if (union_find(p) != u) return;
  if (bio[x][y]) return;
  bio[x][y] = 1;
  rj[x][y] = val;
  brojac++;
  for (int i = 0; i < 4; i++) {
    int novi_x = x + kombX[i];
    int novi_y = y + kombY[i];
    dfs(pair<int, int>(novi_x, novi_y), koliko, u, val);
  }
}
void gotovo(pair<int, int> p, int koliko, int val) {
  memset(bio, 0, sizeof(bio));
  pair<int, int> u = union_find(p);
  dfs(p, koliko, u, val);
  printf("YES\n");
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) printf("%d ", rj[i][j]);
    printf("\n");
  }
}
int main() {
  cin >> n >> m >> sum;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      scanf("%d", &mat[i][j]);
      v.push_back(make_pair(mat[i][j], pair<int, int>(i, j)));
      tata[i][j] = pair<int, int>(i, j);
      velicina[i][j] = 1;
    }
  sort(v.begin(), v.end());
  reverse(v.begin(), v.end());
  for (int br = 0; br < v.size(); br++) {
    pair<int, int> sad = v[br].second;
    bio[sad.first][sad.second] = 1;
    for (int i = 0; i < 4; i++) {
      int novi_x = sad.first + kombX[i];
      int novi_y = sad.second + kombY[i];
      if (vani(novi_x, novi_y)) continue;
      if (!bio[novi_x][novi_y]) continue;
      spoji(sad, pair<int, int>(novi_x, novi_y));
    }
    int v = mat[sad.first][sad.second];
    if (sum % v != 0) continue;
    long long int koliko = sum / v;
    pair<int, int> u = union_find(sad);
    if (koliko <= velicina[u.first][u.second]) {
      gotovo(sad, koliko, v);
      return 0;
    }
  }
  printf("NO\n");
  return 0;
}
