#define _USE_MATH_DEFINES
#include <cstdio>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <complex>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <limits>
#include <climits>
#include <cfloat>
#include <functional>
#include <iterator>
using namespace std;

template <class T1>
class Operators
{
public:
    template <class T2>
    const T1 operator+(const T2& right) const{
        T1 ans = static_cast<const T1&>( *this );
        ans += right;
        return ans;
    }
    template <class T2>
    const T1 operator-(const T2& right) const{
        T1 ans = static_cast<const T1&>( *this );
        ans -= right;
        return ans;
    }
    template <class T2>
    const T1 operator*(const T2& right) const{
        T1 ans = static_cast<const T1&>( *this );
        ans *= right;
        return ans;
    }
    template <class T2>
    const T1 operator/(const T2& right) const{
        T1 ans = static_cast<const T1&>( *this );
        ans /= right;
        return ans;
    }
    bool operator!=(const T1& right) const{
        const T1& left = static_cast<const T1&>( *this );
        return !(left == right);
    }
};

class Point : public Operators<Point>
{
public:
    double y, x;
    Point(){
        y = x = 0.0;
    }
    Point(double y0, double x0){
        y = y0;
        x = x0;
    }
    Point(double theta){
        y = sin(theta);
        x = cos(theta);
    }
    Point& operator+=(const Point& p){
        y += p.y;
        x += p.x;
        return *this;
    }
    Point& operator-=(const Point& p){
        y -= p.y;
        x -= p.x;
        return *this;
    }
    Point& operator*=(double a){
        y *= a;
        x *= a;
        return *this;
    }
    Point& operator/=(double a){
        y /= a;
        x /= a;
        return *this;
    }
    double length() const{
        return sqrt(y * y + x * x);
    }
    double dist(const Point& p) const{
        return sqrt(pow(y - p.y, 2) + pow(x - p.x, 2));
    }
    double dot(const Point& p) const{
        return y * p.y + x * p.x; // |a|*|b|*cos??
    }
    double cross(const Point& p) const{
        return x * p.y - y * p.x; // |a|*|b|*sin??
    }
    double angle() const{
        return atan2(y, x);
    }
    Point rotate(double theta) const{
        double y2 = x * sin(theta) + y * cos(theta);
        double x2 = x * cos(theta) - y * sin(theta);
        return Point(y2, x2);
    }
};

double polygonArea(const vector<Point>& p)
{
    int n = p.size();
    double ret = 0.0;
    for(int i=0; i<n; ++i)
        ret += p[i].cross(p[(i+1)%n]);
    return abs(ret) / 2.0;
}

double solve(vector<Point> p, double s)
{
    int n = p.size();

    double ans = 0.0;
    for(int k=0; k<n; ++k){
        for(int i=n-1; i>=0; --i)
            p[i] -= p[0];
        double theta = (p[1] - p[0]).angle();
        for(int i=1; i<n; ++i)
            p[i] = p[i].rotate(-theta);

        double left = 0.0;
        double right = 0.0;
        for(int i=0; i<n; ++i)
            right = max(right, p[i].y);

        for(int t=0; t<50; ++t){
            double mid = (left + right) / 2;
            vector<Point> p2;
            bool isUpper = false;
            for(int i=0; i<n; ++i){
                if(!isUpper)
                    p2.push_back(p[i]);
                if(isUpper ^ (p[(i+1)%n].y > mid)){
                    double a = (mid - p[i].y) / (p[(i+1)%n].y - p[i].y);
                    p2.push_back(p[i] * (1.0 - a) + p[(i+1)%n] * a);
                    isUpper = !isUpper;
                }
            }

            double area = polygonArea(p2);
            if(area < s)
                left = mid;
            else
                right = mid;
        }
        ans = max(ans, left);

        rotate(p.begin(), p.begin() + 1, p.end());
    }

    return ans;
}

int main()
{
    for(;;){
        int n, d, v;
        cin >> n >> d >> v;
        if(n == 0)
            return 0;

        vector<Point> p(n);
        for(int i=0; i<n; ++i)
            cin >> p[i].x >> p[i].y;

        double ans = solve(p, v / (double) d);
        printf("%.10f\n", ans);
    }
}

Measured memory_bytes: 3712