#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int H, W, vis[1000][1000], K;
int mps[1000][1000], lds;
char sd[1000];
int sx, sy, dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
inline void deal(int xx, int yy) {
  lds = min(lds, xx - 1);
  lds = min(lds, H - xx);
  lds = min(lds, yy - 1);
  lds = min(lds, W - yy);
}
int main() {
  H = read();
  W = read();
  K = read();
  lds = 1000;
  for (int i = 1; i <= H; i++) {
    scanf("%s", sd);
    for (int j = 0; j < W; j++) {
      mps[i][j + 1] = sd[j] == '#';
      if (sd[j] == 'S') sx = i, sy = j + 1;
    }
  }
  queue<int> q;
  while (!q.empty()) q.pop();
  q.push(sx);
  q.push(sy);
  vis[sx][sy] = 1;
  deal(sx, sy);
  while (!q.empty()) {
    int lx = q.front();
    q.pop();
    int ly = q.front();
    q.pop();
    for (int i = 0; i < 4; i++) {
      int vx = lx + dir[i][0];
      int vy = ly + dir[i][1];
      if (vx < 1 || vy < 1 || vx > H || vy > W) continue;
      if (mps[vx][vy]) continue;
      if (!vis[vx][vy]) {
        vis[vx][vy] = 1;
        deal(vx, vy);
        q.push(vx);
        q.push(vy);
      }
    }
  }
  cout << 1 + lds / K + (lds % K != 0) << endl;
  return 0;
}
