using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using CompLib.Util;

public class Program
{
    int H, W, K;
    string[] A;
    int[] dx = new int[] { 0, 0, 1, -1 };
    int[] dy = new int[] { 1, -1, 0, 0 };
    public void Solve()
    {
        var sc = new Scanner();
        H = sc.NextInt();
        W = sc.NextInt();
        K = sc.NextInt();
        A = new string[H];
        for (int i = 0; i < H; i++)
        {
            A[i] = sc.Next();
        }


        // SからK回以内の移動　端までの距離 最小


        var d = new int[H, W];
        for (int i = 0; i < H; i++)
        {
            for (int j = 0; j < W; j++)
            {
                d[i, j] = int.MaxValue;
            }
        }

        int sy = -1;
        int sx = -1;
        for (int i = 0; i < H; i++)
        {
            for (int j = 0; j < W; j++)
            {
                if (A[i][j] == 'S')
                {
                    sy = i;
                    sx = j;
                    break;
                }
            }
            if (sy != -1) break;
        }

        var yq = new Queue<int>();
        var xq = new Queue<int>();

        yq.Enqueue(sy);
        xq.Enqueue(sx);
        d[sy, sx] = 0;
        while (yq.Count > 0)
        {
            var yy = yq.Dequeue();
            var xx = xq.Dequeue();
            for (int i = 0; i < 4; i++)
            {
                int ny = yy + dy[i];
                int nx = xx + dx[i];
                if (ny < 0 || ny >= H) continue;
                if (nx < 0 || nx >= W) continue;
                if (d[ny, nx] <= d[yy, xx] + 1) continue;
                if (d[yy, xx] + 1 > K) continue;
                if (A[ny][nx] == '#') continue;
                d[ny, nx] = d[yy, xx] + 1;
                yq.Enqueue(ny);
                xq.Enqueue(nx);
            }
        }

        int ans = int.MaxValue;

        for (int i = 0; i < H; i++)
        {
            for (int j = 0; j < W; j++)
            {
                if (d[i, j] != int.MaxValue)
                {
                    int yy = Math.Min(i, H - 1 - i);
                    int xx = Math.Min(j, W - 1 - j);
                    ans = Math.Min(ans, 1 + (Math.Min(yy, xx) + K - 1) / K);
                }
            }
        }
        Console.WriteLine(ans);
    }


    public static void Main(string[] args) => new Program().Solve();
}

namespace CompLib.Util
{
    using System;
    using System.Linq;

    class Scanner
    {
        private string[] _line;
        private int _index;
        private const char Separator = ' ';

        public Scanner()
        {
            _line = new string[0];
            _index = 0;
        }

        public string Next()
        {
            while (_index >= _line.Length)
            {
                _line = Console.ReadLine().Split(Separator);
                _index = 0;
            }

            return _line[_index++];
        }

        public int NextInt() => int.Parse(Next());
        public long NextLong() => long.Parse(Next());
        public double NextDouble() => double.Parse(Next());
        public decimal NextDecimal() => decimal.Parse(Next());
        public char NextChar() => Next()[0];
        public char[] NextCharArray() => Next().ToCharArray();

        public string[] Array()
        {
            _line = Console.ReadLine().Split(Separator);
            _index = _line.Length;
            return _line;
        }

        public int[] IntArray() => Array().Select(int.Parse).ToArray();
        public long[] LongArray() => Array().Select(long.Parse).ToArray();
        public double[] DoubleArray() => Array().Select(double.Parse).ToArray();
        public decimal[] DecimalArray() => Array().Select(decimal.Parse).ToArray();
    }
}


Measured memory_bytes: 18652