#include <bits/stdc++.h>
using namespace std;
const int maxn = 505;
int m, n, vis[maxn][maxn], level[maxn][maxn], edges;
vector<pair<int, int> > v;
char c[maxn][maxn];
int dr[] = {1, 0, -1, 0};
int dc[] = {0, 1, 0, -1};
void reset() {
  memset(vis, 0, sizeof(vis));
  memset(level, 0, sizeof(level));
}
bool isValid(int x, int y) {
  return !vis[x][y] && x >= 0 && y >= 0 && x < n && y < m && c[x][y] == '.';
}
void bfs(int x, int y) {
  queue<pair<int, int> > q;
  q.push(make_pair(x, y));
  vis[x][y] = 1;
  v.push_back(make_pair(x, y));
  while (!q.empty()) {
    x = q.front().first;
    y = q.front().second;
    q.pop();
    for (int i = 0; i < 4; i++) {
      int cx = x + dr[i];
      int cy = y + dc[i];
      if (isValid(cx, cy)) {
        vis[cx][cy] = 1;
        level[cx][cy] = level[x][y] + 1;
        v.push_back(make_pair(cx, cy));
        q.push(make_pair(cx, cy));
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ;
  reset();
  int a, b, k;
  cin >> n >> m >> k;
  pair<int, int> start = make_pair(-1, -1);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> c[i][j];
      if (c[i][j] == '.' && start.first == -1) {
        start = make_pair(i, j);
      }
    }
  }
  bfs(start.first, start.second);
  for (int i = 0; i < v.size(); i++) {
    c[v[i].first][v[i].second] = '.';
    if (i >= v.size() - k) c[v[i].first][v[i].second] = 'X';
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cout << c[i][j];
    }
    cout << endl;
  }
}
