#include <bits/stdc++.h>
using namespace std;
int n, m, k, d[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
char mp[888][888];
bool vis[888][888];
struct node {
  int x, y, num;
  node(int a = 0, int b = 0, int c = 0) {
    x = a;
    y = b;
    num = c;
  }
};
queue<node> q;
void bfs(int x, int y) {
  memset(vis, 0, sizeof(vis));
  while (!q.empty()) q.pop();
  q.push(node(x, y, k));
  vis[x][y] = 1;
  while (!q.empty()) {
    node tp = q.front();
    q.pop();
    if (tp.num == 0) continue;
    for (int i = 0; i < 4; ++i) {
      int dx = tp.x + d[i][0], dy = tp.x + d[i][1];
      if (dx < 0 || dx >= n || dy < 0 || dy >= m) continue;
      if (mp[dx][dy] == '#') continue;
      if (vis[dx][dy]) continue;
      vis[dx][dy] = 1;
      q.push(node(dx, dy, tp.num - 1));
    }
  }
}
int cal(int L) {
  if (L % k)
    return L / k + 1;
  else
    return L / k;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < n; ++i) scanf("%s", mp[i]);
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
      if (mp[i][j] == 'S') bfs(i, j);
  int ans = 2 * n * m;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      if (!vis[i][j]) continue;
      if (i == 0 || i == n - 1 || j == 0 || j == m - 1) ans = min(ans, 1);
      ans = min(ans, 1 + cal(i));
      ans = min(ans, 1 + cal(n - i - 1));
      ans = min(ans, 1 + cal(j));
      ans = min(ans, 1 + cal(m - j - 1));
    }
  }
  printf("%d\n", ans);
  return 0;
}
