#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
template <class T>
using V = vector<T>;
template <class T, class U>
using P = pair<T, U>;
const ll MOD = (ll)1e9 + 7;
const ll MOD2 = 998244353;
const ll LLINF = (ll)1e18;
const ll INTINF = (ll)1e9;
const long double PI = 3.1415926535897932384626433;
template <class T>
void corner(bool flg, T hoge) {
  if (flg) {
    cout << hoge << endl;
    exit(0);
  }
}
template <class T, class U>
ostream &operator<<(ostream &o, const map<T, U> &obj) {
  o << "{";
  for (auto &x : obj)
    o << " {" << x.first << " : " << x.second << "}"
      << ",";
  o << " }";
  return o;
}
template <class T>
ostream &operator<<(ostream &o, const set<T> &obj) {
  o << "{";
  for (auto itr = obj.begin(); itr != obj.end(); ++itr)
    o << (itr != obj.begin() ? ", " : "") << *itr;
  o << "}";
  return o;
}
template <class T>
ostream &operator<<(ostream &o, const multiset<T> &obj) {
  o << "{";
  for (auto itr = obj.begin(); itr != obj.end(); ++itr)
    o << (itr != obj.begin() ? ", " : "") << *itr;
  o << "}";
  return o;
}
template <class T>
ostream &operator<<(ostream &o, const vector<T> &obj) {
  o << "{";
  for (int i = 0; i < (int)obj.size(); ++i) o << (i > 0 ? ", " : "") << obj[i];
  o << "}";
  return o;
}
template <class T, class U>
ostream &operator<<(ostream &o, const pair<T, U> &obj) {
  o << "{" << obj.first << ", " << obj.second << "}";
  return o;
}
template <template <class tmp> class T, class U>
ostream &operator<<(ostream &o, const T<U> &obj) {
  o << "{";
  for (auto itr = obj.begin(); itr != obj.end(); ++itr)
    o << (itr != obj.begin() ? ", " : "") << *itr;
  o << "}";
  return o;
}
void print(void) { cout << endl; }
template <class Head>
void print(Head &&head) {
  cout << head;
  print();
}
template <class Head, class... Tail>
void print(Head &&head, Tail &&...tail) {
  cout << head << " ";
  print(forward<Tail>(tail)...);
}
template <class T>
void chmax(T &a, const T b) {
  a = max<T>(a, b);
}
template <class T>
void chmin(T &a, const T b) {
  a = min<T>(a, b);
}
void YN(bool flg) { cout << ((flg) ? "YES" : "NO") << endl; }
void Yn(bool flg) { cout << ((flg) ? "Yes" : "No") << endl; }
void yn(bool flg) { cout << ((flg) ? "yes" : "no") << endl; }
class Grid_Breadth_First_Dearch {
 public:
  int H, W;
  vector<string> S;
  vector<vector<int>> dist;
  Grid_Breadth_First_Dearch(int H, int W)
      : H(H), W(W), S(H), dist(H, vector<int>(W)) {}
  void solve(int sy, int sx) {
    for (int i = 0; i < H; ++i)
      for (int j = 0; j < W; ++j) dist[i][j] = -1;
    queue<pair<int, int>> q;
    dist[sy][sx] = 0;
    q.push({sy, sx});
    while (q.size()) {
      int y = q.front().first;
      int x = q.front().second;
      q.pop();
      if (0 < y && S[y - 1][x] == '.' && dist[y - 1][x] == -1) {
        dist[y - 1][x] = dist[y][x] + 1;
        q.push({y - 1, x});
      }
      if (y < H - 1 && S[y + 1][x] == '.' && dist[y + 1][x] == -1) {
        dist[y + 1][x] = dist[y][x] + 1;
        q.push({y + 1, x});
      }
      if (0 < x && S[y][x - 1] == '.' && dist[y][x - 1] == -1) {
        dist[y][x - 1] = dist[y][x] + 1;
        q.push({y, x - 1});
      }
      if (x < W - 1 && S[y][x + 1] == '.' && dist[y][x + 1] == INTINF) {
        dist[y][x + 1] = dist[y][x] + 1;
        q.push({y, x + 1});
      }
    }
  }
};
int main() {
  int H, W, K;
  cin >> H >> W >> K;
  Grid_Breadth_First_Dearch gridBFS(H, W);
  for (long long i = 0; i < (H); i++) cin >> gridBFS.S[i];
  int y, x;
  for (long long i = 0; i < (H); i++)
    for (long long j = 0; j < (W); j++)
      if (gridBFS.S[i][j] == 'S') y = i, x = j;
  gridBFS.solve(y, x);
  int ans = INTINF;
  for (long long i = 0; i < (H); i++)
    for (long long j = 0; j < (W); j++) {
      if (gridBFS.dist[i][j] == -1) continue;
      if (gridBFS.dist[i][j] > K) continue;
      int cnt;
      cnt = i / K + (i % K == 0 ? 0 : 1) + 1;
      chmin(ans, cnt);
      cnt = (W - 1 - j) / K + ((W - 1 - j) % K == 0 ? 0 : 1) + 1;
      chmin(ans, cnt);
      cnt = (H - 1 - i) / K + ((H - 1 - i) % K == 0 ? 0 : 1) + 1;
      chmin(ans, cnt);
      cnt = j / K + (j % K == 0 ? 0 : 1) + 1;
      chmin(ans, cnt);
    }
  cout << ans << endl;
  return 0;
}
