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

def goal?(coord)
  coord[0] <= 0 || coord[0] >= H-1 || coord[1] <= 0 || coord[1] >= W-1
end

def f(a, k)
  start = start_coord(a)
  return 0 if goal?(start)

  visited = H.times.map{ [false]*W }

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

  while !queue.empty?
    curr = queue.shift
    h, w = curr
    min = [min, h, w, H-h-1, W-w-1].min
    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 a[h][w] == "#"
      next if (h-start[0]).abs + (w-start[1]).abs > k
      next if visited[h][w]
      # return 1 if goal?([h,w])
      queue << [h,w]
      visited[h][w] = true
    }
  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
  1 + min.fdiv(k).ceil
end

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