/*
           _                   _         _       __  __  _____ 
     /\   | |            /\   | |       | |     |  \/  |/ ____|
    /  \  | |__   ___   /  \  | |__   __| | ___ | \  / | |     
   / /\ \ | '_ \ / _ \ / /\ \ | '_ \ / _` |/ _ \| |\/| | |     
  / ____ \| |_) | (_) / ____ \| |_) | (_| | (_) | |  | | |____ 
 /_/    \_\_.__/ \___/_/    \_\_.__/ \__,_|\___/|_|  |_|\_____|

*/

#include <bits/stdc++.h>
#include <bits/extc++.h>

using namespace std;
using namespace __gnu_pbds;

#define F first
#define S second
#define pb push_back
#define all(x) x.begin(), x.end()
#define sz(x) ((int)(x).size())

typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

const ld eps = 1e-9;
const int mod = 1e9 + 7;
const int oo = 1e9 + 7;
const ll lloo = 1e18 + 7;
const int N = 1e6 + 7;

void solve();

int main()
{
	// freopen("in","r",stdin);
	// freopen("out","w",stdout);
	int t = 1;
	// scanf("%d",&t);
	while (t--) solve();
	return 0;
}

int n,d,h;
int x[N],y[N];
void solve()
{
	scanf("%d %d %d",&n,&d,&h);
	for(int i = 0 ; i < n ; i++) scanf("%d %d",x+i,y+i);
	ld ans = 1000;
	for(int i = 0 ; i < n ; i++)
	{
		ld m = h-y[i];
		m/=d-x[i];
		ld ca = m*d-h;
		bool ok = 1;
		for(int j = 0 ; j < n ; j++)
		{
			ld yy = m*x[j]-ca;
			if (abs(yy-y[j]) < eps || yy > y[j]) ok &= 1;
			else ok &= 0;
		}
		if (ok) ans = min(ans,-ca);
	}
	ans = max(ans,(ld)0);
	printf("%.9Lf\n",ans);
}

#include <bits/stdc++.h>
using namespace std;
// #include <atcoder/all>
// using namespace atcoder;
#define rep(i,n) for (int i = 0; i < (n); ++i)
using ll = long long;
using P = pair<int,int>;

int main(){
    int n,D,H;
    cin>>n>>D>>H;
    double ans=0;
    rep(i,n){
        int d,h;
        cin>>d>>h;
        double now=H- double ((H-h)*D)/(D-d);
        ans=max(ans,now);

    }
    printf("%.10f\n",ans);
    return 0;
}