
#include <iostream>
#include <algorithm>
#include <string.h>
#include <vector>
#include <queue>

using namespace std;

#define pb push_back
#define mp make_pair
#define ll long long
#define ull unsigned ll
#define db double
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define PII pair<int, int>

const int N=805;
int h,w,k;
char grid[N][N];
bool vis[N][N];

bool lock_h(int l,int r,int x) {
    for (int i=l;i<=r;i++) {
        if (grid[x][i]=='#') return true;
    }
    return false;
}

bool lock_v(int u,int d,int y) {
    for (int i=u;i<=d;i++) {
        if (grid[i][y]=='#') return true;
    }
    return false;
}

int foo(int x,int y) {
    if (x==0||x==h-1||y==0||y==w-1) return 0;
    int res=INF;

    int tmp=(x-1)/k+1;
    if (lock_v(x-(((x-1)%k)+1),x-1,y)) tmp++;
    res=min(res,tmp);

    int xx=h-1-x;
    tmp=(xx-1)/k+1;
    if (lock_v(x+1,x+((xx-1)%k)+1,y)) tmp++;
    res=min(res,tmp);

    tmp=(y-1)/k+1;
    if (lock_h(y-(((y-1)%k)+1),y-1,x)) tmp++;
    res=min(res,tmp);

    int yy=w-1-y;
    tmp=(yy-1)/k+1;
    if (lock_h(y+1,y+((yy-1)%k)+1,x)) tmp++;
    res=min(res,tmp);

    return res;
}

int ans=INF;

struct node {
    int x,y,dis;
};

void bfs(int x,int y,int dis) {
    vis[x][y]=true;
    ans=min(ans,foo(x,y));
    queue<node> q;
    q.push({x,y,0});
    while (!q.empty()) {
        node cur=q.front();
        q.pop();
        if (vis[cur.xx][cur.yy]) continue;
        vis[cur.xx][cur.yy]=1;
        if (cur.dis>0) ans=min(ans,foo(cur.x,cur.y));
        for (int i=-1;i<=1;i++) {
            for (int j=-1;j<=1;j++) {
                if ((i==0&&j==0)||(i!=0&&j!=0)) continue;
                int xx=x+i;
                int yy=y+j;
                if (xx>0&&xx<h&&yy>0&&yy<h&&!vis[xx][yy]&&grid[xx][yy]!='#'&&cur.dis<dis) {
                    q.push({xx,yy,cur.dis+1});
                }
            }
        }
    }
}

int main() {
    scanf("%d%d%d",&h,&w,&k);
    for (int i=0;i<h;i++) {
        scanf("%s",grid[i]);
    }
    int sx,sy;
    for (int i=0;i<h;i++) {
        for (int j=0;j<w;j++) {
            if (grid[i][j]=='S') {
                sx=i;
                sy=j;
                break;
            }
        }
    }
    bfs(sx,sy,0);
    printf("%d\n",ans);
}
