#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m, k, p, q, c = 0, count = 0, i, j;
  cin >> n >> m >> k;
  char mat[n + 2][m + 2];
  char res[n + 2][m + 2];
  bool v[n + 2][m + 2], flag = false;
  queue<pair<int, int> > qu;
  pair<int, int> x;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      cin >> mat[i][j];
      res[i][j] = mat[i][j];
      if (mat[i][j] == '.') {
        p = i;
        q = j;
        ++count;
      }
      v[i][j] = false;
    }
  }
  for (i = 0; i < n; i++) {
    mat[i][0] = '#';
    mat[i][m + 1] = '#';
  }
  for (i = 0; i < m; i++) {
    mat[0][i] = '#';
    mat[n + 1][i] = '#';
  }
  qu.push({p, q});
  v[p][q] = true;
  c = 1;
  if ((count - k) == c) flag = true;
  while (!qu.empty()) {
    x = qu.front();
    qu.pop();
    if (v[x.first + 1][x.second] == false &&
        mat[x.first + 1][x.second] == '.' && flag == false) {
      qu.push({x.first + 1, x.second});
      v[x.first + 1][x.second] = true;
      ++c;
    }
    if ((count - k) == c) flag = true;
    if (v[x.first - 1][x.second] == false &&
        mat[x.first - 1][x.second] == '.' && flag == false) {
      qu.push({x.first - 1, x.second});
      v[x.first - 1][x.second] = true;
      ++c;
    }
    if ((count - k) == c) flag = true;
    if (v[x.first][x.second + 1] == false &&
        mat[x.first][x.second + 1] == '.' && flag == false) {
      qu.push({x.first, x.second + 1});
      v[x.first][x.second + 1] = true;
      ++c;
    }
    if ((count - k) == c) flag = true;
    if (v[x.first][x.second - 1] == false &&
        mat[x.first][x.second - 1] == '.' && flag == false) {
      qu.push({x.first, x.second - 1});
      v[x.first][x.second - 1] = true;
      ++c;
    }
    if ((count - k) == c) flag = true;
  }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      if (v[i][j] == false && mat[i][j] == '.') res[i][j] = 'X';
      cout << res[i][j];
    }
    cout << endl;
  }
  return 0;
}
