using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using static System.Console;
namespace AtCoder.AGC014
{
    class ClosedRooms
    {
        class Building
        {
            enum State
            {
                Closed, Open
            }
            struct Point
            {
                public int x, y;
                public Point(int ax, int ay) { x = ax; y = ay; }
            }
            State[,] Rooms;
            int X, Y, H, W, K;
            class Points
            {
                Point minX, maxX, minY, maxY;
                public Points(int h, int w)
                {
                    minX = new Point(w - 1, h - 1);
                    minY = minX;
                    maxX = new Point(0, 0);
                    maxY = maxX;
                }
                public Point[] All()
                {
                    return new Point[] { minX, minY, minX, minY };
                }
                public void Add(int x, int y)
                {
                    var point = new Point(x, y);
                    ReNewMaxX(point);
                    ReNewMaxY(point);
                    ReNewMinX(point);
                    ReNewMinY(point);
                }
                void ReNewMinX(Point other)
                {
                    if (other.x < minX.x) minX = other;
                }
                void ReNewMaxX(Point other)
                {
                    if (other.x > minX.x) maxX = other;
                }
                void ReNewMinY(Point other)
                {
                    if (other.y < minY.y) minY = other;
                }
                void ReNewMaxY(Point other)
                {
                    if (other.y > maxY.y) maxY = other;
                }
            }
            public Building(int h, int w, int k, string [] str)
            {
                Rooms = new State[str[0].Length, str.Length];
                H = h; W = w; K = k;
                for (var y = 0; y < str.Length; ++y)
                    for (var x = 0; x < str[y].Length; ++x)
                        switch (str[y][x])
                        {
                        case '#': Rooms[x, y] = State.Closed; break;
                        case '.': Rooms[x, y] = State.Open; break;
                        default: Rooms[x, y] = State.Open;
                            X = x; Y = y; break;
                        }
            }
            void Expand(int k, int x, int y, ref Points res)
            {
                if (k == 0) return;
                else if (x < 0 || y < 0 || x >= W || y >= H) return;
                else if (Rooms[x, y] == State.Open)
                {
                    res.Add(x, y);
                    Rooms[x, y] = State.Closed;
                    Expand(k - 1, x - 1, y, ref res); Expand(k - 1, x + 1, y, ref res); Expand(k - 1, x, y - 1, ref res); Expand(k - 1, x, y + 1, ref res);
                }
            }
            int CalMinDistance(Point p)
            {
                return new int[]{ p.x, W - p.x - 1, p.y, H - p.y - 1}.Min();
            }
            public int Solve()
            {
                Points points = new Points(H, W);
                Expand(K, X, Y, ref points);
                return (points.All().Min(p => CalMinDistance(p)) + K - 1) / K + 1;
            }
        }
        public static void Main()
        {
            var hwk = ReadLine().Trim().Split(' ').Select(n => int.Parse(n)).ToArray();
            var building = new Building(hwk[0], hwk[1], hwk[2], new string[hwk[0]].Select(s => ReadLine().Trim()).ToArray());
            WriteLine(building.Solve());
        }
    }
}