#include <bits/stdc++.h>
using namespace std;
vector<long long> dsu, sz;
vector<bool> used;
vector<vector<long long>> v;
void init(long long n) {
  used.resize(n);
  dsu.resize(n);
  sz.resize(n, 1);
  for (long long i = 0; i < n; i++) dsu[i] = i;
}
long long Find(long long a) {
  return (dsu[a] == a ? a : dsu[a] = Find(dsu[a]));
}
void Unite(long long a, long long b) {
  a = Find(a);
  b = Find(b);
  if (rand() % 2) swap(a, b);
  dsu[b] = a;
  sz[a] += sz[b];
}
void Add(long long a, long long n, long long m) {
  long long c1 = -1, c2 = -1, c3 = -1, c4 = -1;
  if (a % m > 0) c4 = a - 1;
  if ((a + 1) % m > 0) c2 = a + 1;
  if (a - m >= 0) c1 = a - m;
  if (a + m < m * n) c3 = a + m;
  used[a] = true;
  if (c1 != -1 && used[c1] && Find(a) != Find(c1)) Unite(a, c1);
  if (c2 != -1 && used[c2] && Find(a) != Find(c2)) Unite(a, c2);
  if (c3 != -1 && used[c3] && Find(a) != Find(c3)) Unite(a, c3);
  if (c4 != -1 && used[c4] && Find(a) != Find(c4)) Unite(a, c4);
}
long long delnow = 0, delall;
vector<bool> usedindfs;
void dfs(long long ver, long long n, long long m) {
  usedindfs[ver] = true;
  long long c1 = -1, c2 = -1, c3 = -1, c4 = -1;
  if (ver % m > 0) c4 = ver - 1;
  if ((ver + 1) % m > 0) c2 = ver + 1;
  if (ver - m >= 0) c1 = ver - m;
  if (ver + m < m * n) c3 = ver + m;
  if (c1 != -1 && Find(c1) == Find(ver) && !usedindfs[c1]) dfs(c1, n, m);
  if (c2 != -1 && Find(c2) == Find(ver) && !usedindfs[c2]) dfs(c2, n, m);
  if (c3 != -1 && Find(c3) == Find(ver) && !usedindfs[c3]) dfs(c3, n, m);
  if (c4 != -1 && Find(c4) == Find(ver) && !usedindfs[c4]) dfs(c4, n, m);
  if (delnow < delall) {
    v[ver / m][ver % m] = 0;
    delnow++;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, m, k;
  cin >> n >> m >> k;
  v.resize(n, vector<long long>(m));
  init(n * m);
  vector<pair<long long, long long>> lens;
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < m; j++) {
      cin >> v[i][j];
      lens.push_back({v[i][j], i * m + j});
    }
  }
  sort(lens.rbegin(), lens.rend());
  vector<long long> eq;
  long long len = -1, del = 0, delincomp = 0, ind;
  for (long long i = 0; i < lens.size(); i++) {
    if (i < lens.size() - 1 && lens[i].first == lens[i + 1].first) {
      Add(lens[i].second, n, m);
      eq.push_back(lens[i].second);
      continue;
    }
    Add(lens[i].second, n, m);
    eq.push_back(lens[i].second);
    if (lens[i].first * (i + 1) < k) {
      eq.clear();
      continue;
    }
    if (lens[i].first * (i + 1) == k && sz[Find(lens[i].second)] == (i + 1)) {
      len = lens[i].first;
      break;
    } else if (lens[i].first * (i + 1) == k || k % lens[i].first != 0) {
      eq.clear();
      continue;
    }
    long long delnum = i + 1 - k / lens[i].first;
    bool flag = false;
    for (long long j = 0; j < eq.size(); j++) {
      if ((i + 1) - sz[Find(eq[j])] <= delnum) {
        if ((i + 1) - sz[Find(eq[j])] < delnum)
          delincomp = delnum - ((i + 1) - sz[Find(eq[j])]);
        flag = true;
        len = lens[i].first;
        del = delnum;
        ind = eq[j];
        break;
      }
    }
    if (flag) break;
    eq.clear();
  }
  if (len == -1) {
    cout << "NO";
    return 0;
  }
  if (del != 0) {
    if (delincomp != 0) {
      delall = delincomp;
      usedindfs.resize(n * m);
      dfs(ind, n, m);
    }
    for (long long i = 0; i < n; i++) {
      for (long long j = 0; j < m; j++) {
        if (v[i][j] < len || Find(i * m + j) != Find(ind))
          v[i][j] = 0;
        else
          v[i][j] = len;
      }
    }
  } else {
    for (long long i = 0; i < n; i++) {
      for (long long j = 0; j < m; j++) {
        if (v[i][j] < len)
          v[i][j] = 0;
        else
          v[i][j] = len;
      }
    }
  }
  cout << "YES" << endl;
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < m; j++) {
      cout << v[i][j] << " ";
    }
    cout << endl;
  }
}
