#include <bits/stdc++.h>
using namespace std;
char mov_y[] = {1, -1, 0, 0};
char mov_x[] = {0, 0, 1, -1};
vector<int> adj[(int)505];
int n, m, k;
char grid[(int)505][(int)505];
bool vis[(int)505][(int)505];
bool ok(int nx, int ny) {
  if (nx < n && ny < m && nx >= 0 && ny >= 0) return true;
  return false;
}
void dfs(int r, int c) {
  if (vis[r][c]) return;
  vis[r][c] = true;
  for (int i = 0; i < 4; i++) {
    int nx = r + mov_x[i];
    int ny = c + mov_y[i];
    if (ok(nx, ny) && grid[nx][ny] == '.') dfs(nx, ny);
  }
  if (k) {
    grid[r][c] = 'X';
    k--;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout << fixed << setprecision(6);
  int r, c;
  cin >> n >> m >> k;
  bool p = false;
  bool stp = false;
  for (int i = 0; i < n; i++) cin >> grid[i];
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (grid[i][j] == '.') {
        r = i;
        c = j;
        stp = true;
        break;
      }
    }
    if (stp) break;
  }
  dfs(r, c);
  for (int i = 0; i < n; i++) cout << grid[i] << endl;
}
