#include <bits/stdc++.h>
using namespace std;
int ans = 23333333, sum, H, W, K, x1, y1, f[805][805][4];
int vis[805][805], fx[4][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};
char map[805][805];
struct xx {
  int x, y, dep;
};
queue<xx> q;
int check(int x, int y) {
  return 1 <= x && x <= H && 1 <= y && y <= W && map[x][y] != '#';
}
int cal(int x) { return (((x) > 0) ? ((x)-1) / K + 1 : 0); }
void bfs() {
  int tmp = 23333333;
  q.push((xx){x1, y1, 0});
  while (!q.empty()) {
    xx now = q.front();
    q.pop();
    int x = now.x, y = now.y, dep = now.dep;
    if (dep > K) continue;
    vis[x][y] = 1;
    tmp = min(tmp, min(cal(x - 1), cal(y - 1)));
    tmp = min(tmp, min(cal(H - x), cal(W - y)));
    if (tmp + 1 > ans) continue;
    for (int i = 0; i < 4; ++i) {
      int xxx = x + fx[i][0];
      int yyy = y + fx[i][1];
      if (check(xxx, yyy) && !vis[xxx][yyy]) q.push((xx){xxx, yyy, dep + 1});
    }
    ans = min(ans, tmp + 1);
  }
  return;
}
int main() {
  scanf("%d%d%d", &H, &W, &K);
  for (int i = 1; i <= H; ++i) scanf("%s", map[i] + 1);
  if (x1 == 1 || x1 == H || y1 == 1 || y1 == W)
    ans = 0;
  else
    bfs();
  printf("%d", ans);
  return 0;
}
