#include <bits/stdc++.h>
using namespace std;
long long n, m, z;
vector<string> mat;
pair<long long, long long> comoeco = {-1, -1}, fim;
vector<vector<bool>> foi;
void dfs(long long i, long long j) {
  if (i == 2 && j == 1) {
  }
  if (i > 0 && mat[i - 1][j] == '.' && !foi[i - 1][j]) {
    foi[i - 1][j] = true;
    dfs(i - 1, j);
  }
  if (i < n - 1 && mat[i + 1][j] == '.' && !foi[i + 1][j]) {
    foi[i + 1][j] = true;
    dfs(i + 1, j);
  }
  if (j > 0 && mat[i][j - 1] == '.' && !foi[i][j - 1]) {
    foi[i][j - 1] = true;
    dfs(i, j - 1);
  }
  if (j < m - 1 && mat[i][j + 1] == '.' && !foi[i][j + 1]) {
    foi[i][j + 1] = true;
    dfs(i, j + 1);
  }
  if (z > 0) {
    mat[i][j] = 'X';
    --z;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> z;
  mat.resize(n);
  foi.resize(n, vector<bool>(m));
  for (auto& p : mat) {
    cin >> p;
  }
  for (int i = 0; i < n && comoeco == pair<long long, long long>{-1, -1}; ++i) {
    for (int j = 0; j < m && comoeco == pair<long long, long long>{-1, -1};
         ++j) {
      if (mat[i][j] == '.') {
        comoeco = {i, j};
      }
    }
  }
  foi[comoeco.first][comoeco.second] = true;
  dfs(comoeco.first, comoeco.second);
  cerr << endl;
  for (int i = 0; i < n; ++i) {
    cout << mat[i] << "\n";
  }
  return 0;
}
