#include <bits/stdc++.h>
const int INF = 0x7F7F7F7F;
const double EPS = 1e-10;
const long long mod7 = 1e9 + 7;
const long long mod9 = 1e9 + 9;
using namespace std;
inline long long rit() {
  long long f = 0, key = 1;
  char c;
  do {
    c = getchar();
    if (c == '-') key = -1;
  } while (c < '0' || c > '9');
  do {
    f = f * 10 + c - '0';
    c = getchar();
  } while (c >= '0' && c <= '9');
  return f * key;
}
inline void fprt(double f) { printf("%.08lf", f); }
void init() {}
const int Z = 505;
int n, m, k, ct;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
char c[Z][Z];
int mk[Z][Z];
void dfs(int x, int y) {
  if (ct >= k) return;
  mk[x][y] = 1;
  for (int i = 0; i < 4; ++i) {
    if (mk[dx[i] + x][dy[i] + y] == 0 && c[dx[i] + x][dy[i] + y] == '.') {
      dfs(dx[i] + x, dy[i] + y);
      if (ct >= k) return;
    }
  }
  if (ct < k) {
    c[x][y] = 'X';
    ct++;
  }
  if (ct >= k) return;
  mk[x][y] = 0;
}
void read() {
  n = rit(), m = rit(), k = rit();
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j) scanf(" %c", &c[i][j]);
}
void solve() {
  while (1) {
    if (ct >= k) {
      for (int i2 = 1; i2 <= n; ++i2) {
        for (int j2 = 1; j2 <= m; ++j2) printf("%c", c[i2][j2]);
        printf("\n");
      }
      return;
    }
    for (int i = 1; i <= n; ++i)
      for (int j = 1; j <= m; ++j) {
        if (c[i][j] == '.') {
          dfs(i, j);
          if (ct >= k) {
            for (int i2 = 1; i2 <= n; ++i2) {
              for (int j2 = 1; j2 <= m; ++j2) printf("%c", c[i2][j2]);
              printf("\n");
            }
            return;
          }
        }
      }
  }
}
int main() {
  int nn = 1;
  while (nn--) {
    init(), read(), solve();
  }
  return 0;
}
