#include <bits/stdc++.h>
using namespace std;
const int maxn = 800, dir[4][2] = {0, 1, 1, 0, 0, -1, -1, 0};
bool a[maxn + 10][maxn + 10];
int stx, sty, n, m, k, ans = 1e9;
struct node {
  int x, y, d;
};
queue<node> q;
void work(int x) { ans = min(ans, (x - 2) / k + 2); }
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j) {
      char c = getchar();
      for (; !isgraph(c); c = getchar())
        ;
      if (c == 'S')
        q.push((node){i, j, k}), a[i][j] = 1;
      else if (c == '#')
        a[i][j] = 1;
    }
  for (; !q.empty(); q.pop()) {
    node x = q.front();
    if (x.x == 1 || x.x == n || x.y == 1 || x.y == m)
      ans = 1;
    else {
      work(x.x);
      work(n - x.x);
      work(x.y);
      work(m - x.y);
    }
    if (x.d)
      for (int i = 0; i < 4; ++i) {
        node e = (node){x.x + dir[i][0], x.y + dir[i][1], x.d - 1};
        if (e.x <= 0 || e.x > n || e.y <= 0 || e.y > m || a[e.x][e.y]) continue;
        a[e.x][e.y] = 1;
        q.push(e);
      }
  }
  printf("%d", ans);
}
