#include <bits/stdc++.h>
using namespace std;
int main() {
  int h, w, k;
  cin >> h >> w >> k;
  vector<vector<char>> grid(h, vector<char>(w));
  int si, sj;
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      cin >> grid[i][j];
      if (grid[i][j] == 'S') {
        si = i;
        sj = j;
      }
    }
  }
  using type = pair<int, pair<int, int>>;
  priority_queue<type, vector<type>, greater<type>> pq;
  vector<vector<int>> cost(h, vector<int>(w, -1));
  pq.emplace(0, make_pair(si, sj));
  while (!pq.empty()) {
    auto [c, xy] = pq.top();
    auto [x, y] = xy;
    pq.pop();
    cost[x][y] = c;
    vector<int> dx{1, -1, 0, 0};
    vector<int> dy{0, 0, 1, -1};
    for (auto d : dx) {
      for (auto e : dy) {
        int nx = x + d, ny = y + e;
        if (nx < 0 || nx >= h || ny < 0 || ny >= w) break;
        if (cost[nx][ny] != -1) break;
        if (grid[x][y] != grid[nx][ny]) {
          pq.emplace((c / k + 1) * k, make_pair(nx, ny));
        } else
          pq.emplace(c + 1, make_pair(nx, ny));
      }
    }
  }
  int ans = 1e9;
  for (int i = 0; i < h; i++) {
    ans = min(ans, (cost[i][0] + 1) / k);
    ans = min(ans, (cost[i][w - 1] + 1) / k);
  }
  for (int j = 0; j < w; j++) {
    ans = min(ans, (cost[0][j] + 1) / k);
    ans = min(ans, (cost[h - 1][j] + 1) / k);
  }
  cout << ans << endl;
}
