#include <bits/stdc++.h>
using namespace std;
bool msort(pair<long long, pair<long long, long long> > &a,
           pair<long long, pair<long long, long long> > &b) {
  return a.first > b.first;
}
long long max_component_size = 1;
pair<long long, long long> par[1005][1005];
long long siz[1005][1005];
long long arr[1005][1005];
bool vis[1005][1005];
pair<long long, long long> find_(pair<long long, long long> pos) {
  if (par[pos.first][pos.second].first == -1)
    return pos;
  else {
    par[pos.first][pos.second] = find_(par[pos.first][pos.second]);
    return par[pos.first][pos.second];
  }
}
void union_(pair<long long, long long> a, pair<long long, long long> b) {
  pair<long long, long long> x = find_(a);
  pair<long long, long long> y = find_(b);
  if (x.first == y.first && x.second == y.second)
    return;
  else {
    par[y.first][y.second] = x;
    siz[x.first][x.second] += siz[y.first][y.second];
    max_component_size = max(max_component_size, siz[x.first][x.second]);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n, m, k;
  cin >> n >> m >> k;
  vector<pair<long long, pair<long long, long long> > > v(0);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cin >> arr[i][j];
      v.push_back(make_pair(arr[i][j], make_pair(i, j)));
      par[i][j] = make_pair(-1, -1);
      siz[i][j] = 1;
      vis[i][j] = false;
    }
  }
  for (int i = 0; i <= n; i++) {
    arr[i][0] = 0;
    arr[i][m + 1] = 0;
  }
  for (int j = 0; j <= m; j++) {
    arr[0][j] = 0;
    arr[n + 1][j] = 0;
  }
  sort(v.begin(), v.end(), msort);
  bool found = false;
  pair<long long, long long> center = make_pair(-1, -1);
  long long siz_needed = -1;
  for (int i = 0; i < v.size(); i++) {
    pair<long long, pair<long long, long long> > t = v[i];
    long long x = t.second.first;
    long long y = t.second.second;
    if (arr[x - 1][y] >= arr[x][y])
      union_(make_pair(x - 1, y), make_pair(x, y));
    if (arr[x + 1][y] >= arr[x][y])
      union_(make_pair(x + 1, y), make_pair(x, y));
    if (arr[x][y - 1] >= arr[x][y])
      union_(make_pair(x, y - 1), make_pair(x, y));
    if (arr[x][y + 1] >= arr[x][y])
      union_(make_pair(x, y + 1), make_pair(x, y));
    if (k % v[i].first == 0) {
      if (max_component_size >= (k / v[i].first)) {
        found = true;
        center = make_pair(x, y);
        siz_needed = k / v[i].first;
        break;
      }
    }
  }
  if (!found) {
    cout << "NO\n";
  } else {
    pair<long long, long long> b = find_(center);
    queue<pair<long long, long long> > q;
    q.push(center);
    while (!q.empty()) {
      pair<long long, long long> x = q.front();
      q.pop();
      if (vis[x.first][x.second]) continue;
      vis[x.first][x.second] = true;
      if (siz_needed > 0) {
        pair<long long, long long> z = find_(x);
        if (z.first == b.first && z.second == b.second) {
          arr[x.first][x.second] = arr[center.first][center.second];
          siz_needed--;
          if (x.first < n && !vis[x.first + 1][x.second])
            q.push(make_pair(x.first + 1, x.second));
          if (x.first > 1 && !vis[x.first - 1][x.second])
            q.push(make_pair(x.first - 1, x.second));
          if (x.second < m && !vis[x.first][x.second + 1])
            q.push(make_pair(x.first, x.second + 1));
          if (x.second > 1 && !vis[x.first][x.second - 1])
            q.push(make_pair(x.first, x.second - 1));
        } else {
          arr[x.first][x.second] = 0;
        }
      } else {
        arr[x.first][x.second] = 0;
      }
    }
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        if (!vis[i][j]) arr[i][j] = 0;
      }
    }
    cout << "YES\n";
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        cout << arr[i][j] << " ";
      }
      cout << '\n';
    }
  }
}
