#include <bits/stdc++.h>
using namespace std;
int dist[801][801];
string f[801];
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
template <class T>
bool uin(T &a, T b) {
  return a > b ? (a = b, true) : false;
}
template <class T>
bool uax(T &a, T b) {
  return a < b ? (a = b, true) : false;
}
int nceil(int a, int b) { return (a + b - 1) / b; }
int main() {
  int n, m, k;
  cin >> n >> m >> k;
  int sx = -1, sy = -1;
  for (int i = 0; i < n; i++) {
    cin >> f[i];
    for (int j = 0; j < m; j++) {
      if (f[i][j] == 'S') {
        sx = i;
        sy = j;
      }
    }
  }
  vector<pair<int, int> > q;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      dist[i][j] = 1e9;
    }
  }
  dist[sx][sy] = 0;
  q.push_back(make_pair(sx, sy));
  for (int cur = 0; cur < q.size(); cur++) {
    int x = q[cur].first, y = q[cur].second;
    int ncur = dist[x][y];
    for (int d = 0; d < 4; d++) {
      int xx = x + dx[d], yy = y + dy[d];
      if (min(xx, yy) < 0 || min(n - xx, m - yy) <= 0 || dist[xx][yy] < 1e8 ||
          f[xx][yy] == '#')
        continue;
      dist[xx][yy] = ncur + 1;
      q.push_back(make_pair(xx, yy));
    }
  }
  int ans = 1e9;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (dist[i][j] > k) continue;
      int res = 1e9;
      uin(res, nceil(i, k));
      uin(res, nceil(j, k));
      uin(res, nceil(n - i - 1, k));
      uin(res, nceil(n - j - 1, k));
      uin(ans, res + 1);
    }
  }
  cout << ans << endl;
  return 0;
}
