#include <bits/stdc++.h>
using namespace std;
template <class T>
int getbit(T s, int i) {
  return (s >> i) & 1;
}
template <class T>
T onbit(T s, int i) {
  return s | (T(1) << i);
}
template <class T>
T offbit(T s, int i) {
  return s & (~(T(1) << i));
}
template <class T>
int cntbit(T s) {
  return __builtin_popcount(s);
}
template <class T>
inline T gcd(T a, T b) {
  T r;
  while (b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
long long n, m, k, x[] = {1, -1, 0, 0}, y[] = {0, 0, 1, -1}, dem, S;
char s[505][505];
bool ok[505][505];
void dfs(long long a, long long b) {
  if (dem == S - k) return;
  ok[a][b] = true;
  dem++;
  for (long long i = 0, _b = 4; i < _b; i++) {
    long long u = a + x[i], v = b + y[i];
    if (u > n || u < 1 || v > m || v < 1 || ok[u][v] == true || s[u][v] == '#')
      continue;
    dfs(u, v);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m >> k;
  for (long long i = 1, _b = n; i <= _b; i++)
    for (long long j = 1, _b = m; j <= _b; j++)
      cin >> s[i][j], s[i][j] == '.' ? S++ : 1;
  for (long long i = 1, _b = n; i <= _b; i++)
    for (long long j = 1, _b = m; j <= _b; j++) {
      if (s[i][j] == '.') {
        dfs(i, j);
        for (long long h = 1, _b = n; h <= _b; h++) {
          for (long long g = 1, _b = m; g <= _b; g++) {
            if (ok[h][g])
              cout << ".";
            else if (s[h][g] == '.')
              cout << "X";
            else
              cout << "#";
          }
          cout << "\n";
        }
        return 0;
      }
    }
  return 0;
}
