def g(a)
  a.each_with_index{|hh, h|
    hh.each_with_index{|ww, w|
      return [h, w] if ww == "S"
    }
  }
end

def f(a, k)
  start = g(a)
  visited = H.times.map{ [false]*W }


  queue = [start]
  visited[start[0]][start[1]] = true
  dirs = [[1,0], [-1,0], [0,1], [0,-1]]

  while !queue.empty?
    curr = queue.pop
    dirs.each{|d|
      h = curr[0] + d[0]
      next if !h.between?(0, H-1)
      w = curr[1] + d[1]
      next if !w.between?(0, W-1)
      next if (h-start[0]).abs + (w-start[1]).abs > k
      if !visited[h][w] && a[h][w] != "#"
        queue << [h,w]
        visited[h][w] = true
      end
    }
  end

  hs, ws = [], []
  visited.each_with_index{|hh, h|
    hh.each_with_index{|ww, w|
      if visited[h][w]
        hs << h
        ws << w
      end
    }
  }
  h_min, h_max = hs.minmax
  w_min, w_max = ws.minmax

  1 + [h_min.fdiv(k).ceil, (H-h_max-1).fdiv(k).ceil,
   w_min.fdiv(k).ceil, (W-w_max-1).fdiv(k).ceil,].min
end

H, W, K = gets.split.take(3).map(&:to_i)
A = H.times.map{ gets.chars.take(W) }
p f(A, K)
