#include <bits/stdc++.h>
using namespace std;
int r, c, k, ans;
char arr[805][805];
vector<pair<int, int> > v;
bool visited[805][805];
struct State {
  int b, k, byk;
  State() {}
  State(int _b, int _k, int z) {
    b = _b;
    k = _k;
    byk = z;
  }
};
State s;
queue<State> q;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, -1, 0, 1};
bool inside(int ro, int co) { return 1 <= ro && ro <= r && 1 <= co && co <= c; }
void bfs(int sr, int sc, int Byk) {
  q.push(State(sr, sc, Byk));
  while (!q.empty()) {
    State now = q.front();
    q.pop();
    int b = now.b;
    int k = now.k;
    int byk = now.byk;
    if (byk <= k) {
      v.push_back(make_pair(b, k));
    }
    for (int i = 0; i < 4; i++) {
      if (inside(b + dx[i], k + dy[i]) && arr[b + dx[i]][k + dy[i]] != '#' &&
          visited[b + dx[i]][k + dy[i]] == false) {
        visited[b + dx[i]][k + dy[i]] = true;
        q.push(State(b + dx[i], k + dy[i], byk + 1));
      }
    }
  }
}
int min3(int a, int b, int c) { return min(min(a, b), c); }
int min4(int a, int b, int c, int d) { return min(min3(a, b, c), d); }
int updiv(int a, int b) {
  int tmp = a / b;
  return tmp * b < a ? tmp + 1 : tmp;
}
int main() {
  cin >> r >> c >> k;
  for (int i = 1; i <= r; i++) {
    for (int j = 1; j <= c; j++) {
      cin >> arr[i][j];
    }
  }
  for (int i = 1; i <= r; i++) {
    for (int j = 1; j <= c; j++) {
      if (arr[i][j] == 'S') {
        bfs(i, j, 0);
        break;
      }
    }
  }
  int sol = INT_MAX;
  for (pair<int, int> vec : v) {
    int _r = vec.first, _c = vec.second;
    sol = min(sol, min4(_c - 1, c - _c, _r - 1, r - _r));
  }
  printf("%d\n", updiv(sol, k) + 1);
}
