#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3FFFFFFF;
const long long INFLL = 0x3FFFFFFF3FFFFFFF;
const double INFD = 1.0e+308;
const string INFSTR = "\x7f";
const double EPS = 1.0e-9;
void YesNo(bool b) { cout << (b ? "Yes" : "No") << endl; }
void YESNO(bool b) { cout << (b ? "YES" : "NO") << endl; }
template <class T, class U>
istream& operator>>(istream& ist, pair<T, U>& right) {
  return ist >> right.first >> right.second;
}
template <class T, class U>
ostream& operator<<(ostream& ost, const pair<T, U>& right) {
  return ost << right.first << ' ' << right.second;
}
template <class T, class TCompatible, size_t N>
void Fill(T (&dest)[N], const TCompatible& val) {
  fill(dest, dest + N, val);
}
template <class T, class TCompatible, size_t M, size_t N>
void Fill(T (&dest)[M][N], const TCompatible& val) {
  for (int i = 0; i < M; ++i) Fill(dest[i], val);
}
template <class T>
T Compare(T left, T right) {
  return left > right ? 1 : (left < right ? -1 : 0);
}
istream& Ignore(istream& ist) {
  string s;
  ist >> s;
  return ist;
}
bool Inside(int i, int j, int h, int w) {
  return i >= 0 && i < h && j >= 0 && j < w;
}
istream& operator>>(istream& ist, __int128& val) {
  long long tmp;
  ist >> tmp;
  val = tmp;
  return ist;
}
ostream& operator<<(ostream& ost, __int128 val) {
  long long tmp = val;
  ost << tmp;
  return ost;
}
template <typename T>
using PriorityQ = priority_queue<T, vector<T>, greater<T> >;
int H, W, K;
string S[800];
int si, sj;
int Dist(int i, int j) { return min({i, j, H - i - 1, W - j - 1}); }
int di[] = {0, 1, 0, -1};
int dj[] = {1, 0, -1, 0};
int dist[800][800];
int BFS(int si, int sj) {
  int ret = Dist(si, sj);
  queue<pair<long long, long long> > Q;
  Q.push(pair<long long, long long>(si, sj));
  Fill(dist, INF);
  dist[si][sj] = 0;
  while (!Q.empty()) {
    pair<long long, long long> p = Q.front();
    Q.pop();
    int i = p.first;
    int j = p.second;
    if (S[i][j] == '#') continue;
    if (dist[i][j] > K) continue;
    ret = min(ret, Dist(i, j));
    for (long long k = (0); k < (long long)(4); ++k) {
      int p = i + di[k];
      int q = j + dj[k];
      if (!Inside(p, q, H, W)) continue;
      if (dist[i][j] + 1 > dist[p][q]) continue;
      dist[p][q] = dist[i][j] + 1;
      Q.push(pair<long long, long long>(p, q));
    }
  }
  return ret;
}
int main() {
  cin >> H >> W >> K;
  for (long long i = (0); i < (long long)(H); ++i) {
    cin >> S[i];
    for (long long j = (0); j < (long long)(W); ++j) {
      if (S[i][j] == 'S') {
        si = i;
        sj = j;
      }
    }
  }
  int dist = BFS(si, sj);
  cout << 1 + (dist + K - 1) / K << endl;
  return 0;
}
