#include <bits/stdc++.h>
using namespace std;
const int dr[] = {1, 0, -1, 0, 1, 1, -1, -1};
const int dc[] = {0, 1, 0, -1, 1, -1, -1, 1};
const double eps = 1e-9;
const int INF = 0x7FFFFFFF;
const long long INFLL = 0x7FFFFFFFFFFFFFFFLL;
const double pi = acos(-1);
template <class T>
T take(queue<T> &O) {
  T tmp = O.front();
  O.pop();
  return tmp;
}
template <class T>
T take(stack<T> &O) {
  T tmp = O.top();
  O.pop();
  return tmp;
}
template <class T>
T take(priority_queue<T> &O) {
  T tmp = O.top();
  O.pop();
  return tmp;
}
template <class T>
inline void getint(T &num) {
  bool neg = 0;
  num = 0;
  char c;
  while ((c = getchar_unlocked()) && (!isdigit(c) && c != '-'))
    ;
  if (c == '-') {
    neg = 1;
    c = getchar_unlocked();
  }
  do num = num * 10 + c - '0';
  while ((c = getchar_unlocked()) && isdigit(c));
  if (neg) num = -num;
}
template <class T>
inline bool inRange(T z, T a, T b) {
  return a <= z && z <= b;
}
void OPEN(string in = "input.txt", string out = "output.txt") {
  freopen(in.c_str(), "r", stdin);
  freopen(out.c_str(), "w", stdout);
  return;
}
int ans[1005][1005];
vector<int> nums;
int n, m, d;
long long K;
vector<pair<int, int> > ancol;
int papa[1000005], renk[1000005], cnt[1000005], mn[1000005];
int mappa[1005][1005];
pair<int, int> invmappa[1000005];
bool ada[1005][1005];
int cp(int x) {
  if (papa[x] == x) return x;
  return (papa[x] = cp(papa[x]));
}
inline int join(int x, int y) {
  x = cp(x);
  y = cp(y);
  if (x == y) return x;
  if (renk[x] < renk[y]) {
    papa[x] = y;
    cnt[y] += cnt[x];
    mn[y] = min(mn[y], mn[x]);
    return y;
  } else if (renk[y] < renk[x]) {
    papa[y] = x;
    cnt[x] += cnt[y];
    mn[x] = min(mn[x], mn[y]);
    return x;
  } else {
    papa[y] = x;
    ++renk[x];
    cnt[x] += cnt[y];
    mn[x] = min(mn[x], mn[y]);
    return x;
  }
}
int main(int argc, char const *argv[]) {
  bool lol = 0;
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m >> K;
  int destak = 0;
  for (int(i) = (0), _t = (n); i < (_t); ++(i)) {
    for (int(j) = (0), _t = (m); j < (_t); ++(j)) {
      int tmp;
      cin >> tmp;
      if (!lol && tmp == K) {
        lol = 1;
        ans[i][j] = tmp;
      }
      mappa[i][j] = destak;
      invmappa[destak] = make_pair(i, j);
      papa[destak] = destak;
      renk[destak] = 0;
      cnt[destak] = 1;
      mn[destak] = tmp;
      ++destak;
      ancol.push_back(make_pair(tmp, mappa[i][j]));
    }
  }
  if (lol) {
    cout << "YES\n";
    for (int(iz) = (0), _t = (n); iz < (_t); ++(iz)) {
      for (int(jz) = (0), _t = (m); jz < (_t); ++(jz)) {
        if (jz) cout << " ";
        cout << ans[iz][jz];
      }
      cout << "\n";
    }
    return 0;
  }
  sort(ancol.begin(), ancol.end());
  reverse(ancol.begin(), ancol.end());
  for (const auto &i : ancol) {
    pair<int, int> p = invmappa[i.second];
    int x = p.first, y = p.second;
    for (int(k) = (0), _t = (4); k < (_t); ++(k)) {
      int nx = x + dr[k], ny = y + dc[k];
      if (inRange(nx, 0, n - 1) && inRange(ny, 0, m - 1) && ada[nx][ny]) {
        int res = join(i.second, mappa[nx][ny]);
        long long kurang = K / (1LL * mn[res]);
        if (kurang <= 1LL * cnt[res] && kurang * mn[res] == K) {
          queue<pair<int, int> > Q;
          ans[x][y] = mn[res];
          Q.push(p);
          int dz = kurang - 1;
          while (dz > 0) {
            pair<int, int> now = take(Q);
            for (int(kk) = (0), _t = (4); kk < (_t); ++(kk)) {
              int nx = now.first + dr[kk], ny = now.second + dc[kk];
              if (dz > 0 && inRange(nx, 0, n - 1) && inRange(ny, 0, m - 1) &&
                  ada[nx][ny]) {
                ada[nx][ny] = 0;
                --dz;
                ans[nx][ny] = mn[res];
                Q.push(make_pair(nx, ny));
              }
            }
          }
          cout << "YES\n";
          for (int(iz) = (0), _t = (n); iz < (_t); ++(iz)) {
            for (int(jz) = (0), _t = (m); jz < (_t); ++(jz)) {
              if (jz) cout << " ";
              cout << ans[iz][jz];
            }
            cout << "\n";
          }
          return 0;
        }
      }
    }
    ada[x][y] = 1;
  }
  cout << "NO\n";
  return 0;
}
