#include <bits/stdc++.h>
using namespace std;
char maze[505][505];
bool vis[505][505];
int dx[] = {0, 0, 1, -1};
int dy[] = {-1, 1, 0, 0};
vector<pair<int, int>> ans;
int n, k, m;
bool isf(int x, int y) {
  if (x < 1 || x > n || y < 1 || y > m) return 0;
  if (vis[x][y] || maze[x][y] == '#') return 0;
  return 1;
}
void bfs(int x, int y) {
  vis[x][y] = 1;
  queue<pair<int, int>> pq;
  pq.push({x, y});
  while (!pq.empty()) {
    pair<int, int> curr = pq.front();
    pq.pop();
    ans.push_back(curr);
    int cx = curr.first;
    int cy = curr.second;
    for (int i = 0; i < 4; i++) {
      if (isf(cx + dx[i], cy + dy[i])) {
        vis[cx + dx[i]][cy + dy[i]] = 1;
        pq.push({cx + dx[i], cy + dy[i]});
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) cin >> maze[i][j];
  cout << "\n\n";
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      if (maze[i][j] == '.') {
        bfs(i, j);
        goto here;
      }
    }
here:
  for (int i = 1; i <= k; i++) {
    maze[ans[ans.size() - i].first][ans[ans.size() - i].second] = 'X';
  }
  for (int i = 1; i <= n; i++, cout << endl)
    for (int j = 1; j <= m; j++) cout << maze[i][j];
  return 0;
}
