#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500 + 17;
const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};
int n, m, k;
char G[MAXN][MAXN];
void BFS(int x, int y) {
  queue<pair<int, int>> Q;
  Q.emplace(x, y);
  G[x][y] = '*';
  --k;
  while (k && !Q.empty()) {
    int a = Q.front().first, b = Q.front().second;
    Q.pop();
    for (int i = 0; i < 4; ++i) {
      int nx = a + dx[i], ny = b + dy[i];
      if (nx <= 0 || nx > n || ny <= 0 || ny > m) continue;
      if (G[nx][ny] != '.') continue;
      --k;
      G[nx][ny] = '*';
      Q.emplace(nx, ny);
      if (!k) return;
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; ++i) scanf("%s", G[i] + 1);
  int cnt = 0;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j)
      if (G[i][j] == '.') ++cnt;
  k = cnt - k;
  for (int i = 1; i <= n; ++i) {
    bool st = false;
    for (int j = 1; j <= m; ++j)
      if (G[i][j] == '.') {
        BFS(i, j);
        st = true;
        break;
      }
    if (st) break;
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j)
      if (G[i][j] == '.')
        putchar('X');
      else if (G[i][j] == '*')
        putchar('.');
      else
        putchar('#');
    putchar('\n');
  }
}
