#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define pb push_back
#define fs first
#define sc second
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<double> vd;
typedef pair<int, int> pii;
typedef pair<ll, int> plli;
typedef vector<pii> vpii;
typedef tree<pii, null_type, less<pii>, rb_tree_tag,
    tree_order_statistics_node_update> ost;

const int N =810;
char f[N][N];
int qi[N*N], qj[N*N], qd[N*N];
int di[]={0, 1, 0, -1}, dj[]={1, 0, -1, 0};

int main() {
    int i, j, b, e, h, w, k, d, best;
    scanf("%d%d%d", &h, &w, &k);
    for(i=1; i<=h; i++) scanf("%s", f[i]+1);
    for(i=1; i<=h; i++) for(j=1; j<=w; j++)
        if(f[i][j]=='S') qi[0]=i, qj[0]=j, qd[0]=0;
    best=h+w;
    for(b=e=0; b<=e; b++) {
        best=min(best, qi[b]-1);
        best=min(best, h-qi[b]);
        best=min(best, qj[b]-1);
        best=min(best, w-qi[b]);
        if(qd[b]==k) break;
        for(d=0; d<4; d++) {
            i=qi[b]+di[d];
            j=qj[b]+dj[d];
            if(f[i][j]=='.') {
                f[i][j]='V';
                e++;
                qi[e]=i, qj[e]=j, qd[e]=qd[b]+1;
            }
        }
    }
    printf("%d\n", 1+(best+k-1)/k);
    return 0;
}