#include <bits/stdc++.h>
using namespace std;
int const MAXN = 1000000;
vector<int> g[MAXN];
int n;
vector<int> ans;
int main() {
  ios_base::sync_with_stdio(false);
  char A[502][502];
  int N, M, K;
  string s;
  cin >> N >> M >> K;
  for (int i = 0; i < N; ++i) {
    cin >> s;
    for (int j = 0; j < M; ++j) A[i][j] = s[j];
  }
  int res = 0;
  int fuuu = 0;
  for (int i = 0; i < N; ++i)
    for (int j = 0; j < M; ++j) {
      if (A[i][j] != '#') {
        if (i > 0 && A[i - 1][j] != '#')
          g[i * M + j].push_back((i - 1) * M + j);
        if (i < N - 1 && A[i + 1][j] != '#')
          g[i * M + j].push_back((i + 1) * M + j);
        if (j > 0 && A[i][j - 1] != '#') g[i * M + j].push_back(i * M + j - 1);
        if (j < M - 1 && A[i][j + 1] != '#')
          g[i * M + j].push_back(i * M + j + 1);
      } else
        ++res;
    }
  bool b = false;
  for (int i = 0; i < N * M; ++i) {
    if (b) break;
    fuuu = i;
    int x = fuuu / M;
    int y = fuuu - x * M;
    if (A[x][y] != '#') {
      n = N * M;
      if (K == 0) break;
      int s = fuuu;
      queue<int> q;
      q.push(s);
      vector<bool> used(n);
      vector<int> d(n), p(n);
      used[s] = true;
      p[s] = -1;
      int Z = n - K - 1 - res;
      while (!q.empty()) {
        if (!Z) break;
        int v = q.front();
        q.pop();
        for (size_t i = 0; i < g[v].size(); ++i) {
          int to = g[v][i];
          if (!used[to]) {
            if (!Z) break;
            used[to] = true;
            --Z;
            q.push(to);
            d[to] = d[v] + 1;
            p[to] = v;
          }
        }
        if (!Z) break;
      }
      ans.clear();
      for (int i = 0; i < N * M; ++i)
        if (!used[i]) {
          ans.push_back(i);
        }
      break;
    }
  }
  for (int i = 0; i < ans.size(); ++i) {
    int f = ans[i];
    int x = f / M;
    int y = f - x * M;
    if (A[x][y] != '#') A[x][y] = 'X';
  }
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j < M; ++j) cout << A[i][j];
    cout << endl;
  }
  return 0;
}
