EPS = 1e-9

class Polygon
  Point = Struct.new(:x, :y)
  # ???????¨?????????????????????????????????????
  def initialize(point)
    @point = Array.new
    @bottom = 0
    point.each do |p| add(*p) end
  end
  # ????????????
  def add(x, y)
    @point << Point.new(x, y)
  end
  # ????????°?????????
  def size()
    @point.size
  end
  # ???????¨???????????????¢
  def rotate!
    @bottom += size - 1
    @bottom %= size
    angle = Math::atan2(@point[@bottom].y, @point[@bottom].x)
    x, y = @point[@bottom].x, @point[@bottom].y
    @point.each do |p|
      p.x -= x
      p.y -= y
    end
    @point.each do |p|
      p.x, p.y = p.x * Math::cos(angle) - p.y * Math::sin(angle), p.x * Math::sin(angle) + p.y * Math::cos(angle)
    end
  end
  # ????§???¢??? y = h ?????´?????§????????????, ??????????????????
  def split(h)
    result = Polygon.new([])
    (@point + [@point.first]).each_cons(2) do |p1, p2|
      if p1.y < h + EPS && p2.y < h + EPS
        result.add(p1.x, p1.y)
      elsif p1.y < h + EPS && h < p2.y + EPS
        result.add(p1.x, p1.y)
        result.add(p1.x, h)
      elsif h < p1.y + EPS && p2.y < h + EPS
        result.add(p2.x, h)
      end
    end
    result
  end
  # ????§???¢ (0, 0), p1, p2 ?????¢?????????
  def area()
    (@point + [@point.first]).each_cons(2).map{|p1, p2| (p1.x * p2.y - p1.y * p2.x).abs / 2.0}.inject(:+)
  end
  # ????§???¢?????¢?????? s ?????????????????????????????????
  def height(s)
    low = 0.0
    high = s
    until high - low < EPS
      middle = (low + high) / 2.0
      split(middle).area() < s + EPS ? (low = middle) : (high = middle)
    end
    return 0 if s < split(low).area() + EPS
    low
  end
end

until (n, d, v = gets.split.map(&:to_i)).all?(&:zero?)
  s = v.to_f / d.to_f
  polygon = Polygon.new(n.times.map{gets.split.map(&:to_f)}.map{|x, y| [x + 1000.0, y + 1000.0]})
  answer = 0
  (1 + n).times do
    polygon.rotate!
    answer = [answer, polygon.height(s)].max
  end
  p answer
end