#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
const double eps = 1e-9;
long double pi = 3.14159265358979323846264338327950;
long double e = 2.7182818284590452353602874713527;
int n, m, k, cnArea, fr;
char grid[505][505];
bool vis[505][505];
pair<int, int> mv[] = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};
bool valid(int r, int c) {
  return r >= 0 && r < n && c >= 0 && c < m && grid[r][c] != '#';
}
void dfs(int r, int c) {
  vis[r][c] = 1;
  if (cnArea > 0) {
    --cnArea;
    grid[r][c] = '-';
    for (int i = 0; i < 4; i++) {
      int R = r + mv[i].first;
      int C = c + mv[i].second;
      if (!vis[R][C] && valid(R, C)) {
        dfs(R, C);
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m >> k;
  pair<int, int> st;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> grid[i][j];
      if (grid[i][j] == '.') {
        st = {i, j};
        fr++;
      }
    }
  }
  cnArea = fr - k;
  dfs(st.first, st.second);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (grid[i][j] == '-')
        cout << '.';
      else if (grid[i][j] == '.')
        cout << 'X';
      else
        cout << grid[i][j];
    }
    cout << "\n";
  }
  return 0;
}
