#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int mp[1005][1005], v[1005][1005];
char s[1005];
int sx, sy;
int k1[] = {0, 0, 1, -1};
int k2[] = {1, -1, 0, 0};
struct node {
  int x, y;
  node() { ; }
  node(int _x, int _y) {
    x = _x;
    y = _y;
  }
};
queue<node> q;
void bfs() {
  q.push(node(sx, sy));
  int ans = 0x3f3f3f3f;
  while (!q.empty()) {
    node tmp = q.front();
    q.pop();
    int step = min(min(tmp.x - 1, tmp.y - 1), min(n - tmp.x, m - tmp.y));
    if (!step)
      ans = 1;
    else
      ans = min(ans, (step - 1) / k + 2);
    if (v[tmp.x][tmp.y] == k) continue;
    for (int i = 0; i <= 3; i++) {
      int xx = tmp.x + k1[i], yy = tmp.y + k2[i];
      if (xx >= 1 && xx <= n && yy >= 1 && yy <= m && !mp[xx][yy] &&
          v[xx][yy] == -1) {
        v[xx][yy] = v[tmp.x][tmp.y] + 1;
        q.push(node(xx, yy));
      }
    }
  }
  cout << ans << endl;
  return;
}
int main() {
  memset(v, -1, sizeof(v));
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%s", s + 1);
    for (int j = 1; j <= m; j++) {
      if (s[j] == 'S')
        sx = i, sy = j;
      else if (s[j] == '#')
        mp[i][j] = 1;
    }
  }
  bfs();
  return 0;
}
