#include<iostream>
#include<sstream>
#include<iomanip>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<map>
#include<cmath>
#include<string>
#include<numeric>
#include<queue>


#define rep(i,p) for(long long int i=0;i<p;i++)
#define reep(i,p) for(long long int i=1;i<=p;i++)
#define ll long long
#define MOD 1000000007
#define INF 9223372036854775800

using namespace std;

//----------------------------(a1,b1) (a2,b2)を通る直線の傾き(key0)と切片(key1)
vector<double> strand(long long int a1,long long int a2,long long int b1,long long int b2){
	vector<double> x;
	double d;
	double s;
	if(a1==a2){
		x.push_back(0);
		x.push_back(0);
		return x;
	}
	else{
		d = (double)(b1-b2)/(double)(a1-a2);
		x.push_back(d);
		s=(double)(b1)-d*(double)(a1);
		x.push_back(s);
		return x;
	}
}
int main(){

ll int N , D, H;
cin >> N >> D >> H;
vector< ll int > d(N);
vector< ll int > h(N);
rep(i,N) cin >> d[i] >> h[i];
vector< vector< double > > f(N);

double ans = 0.0;
rep(i,N){
        f[i] = strand(D,d[i],H,h[i]);
	ans = max( ans, f[i][1] );
}
cout << fixed << setprecision(5) << ans << endl;











	return 0;

}


#include<bits/stdc++.h>
using namespace std;
#define ERR(...) fprintf(stderr,__VA_ARGS__);
#define rep(i,l,r) for(i=(l);i<=(r);++i)
#define per(i,l,r) for(i=(l);i>=(r);--i)
#define REP(i,l,r) for(i=(l);i< (r);++i)
#define PER(i,l,r) for(i=(l);i> (r);--i)
typedef long long ll;
priority_queue<int> Queue;
const int MAXN=200005;
int A[MAXN],B[MAXN],P[MAXN],Q[MAXN];
pair<int,int> S[MAXN];
inline bool ok(int v){return P[v]!=Q[v]&&A[P[v]]>B[v]&&A[v]>B[v]&&A[P[v]]>B[P[v]];}
inline void ac(){
	int n,i,p,q,s=0;
	scanf("%d",&n);
	rep(i,1,n)scanf("%d",&A[i]);
	rep(i,1,n)scanf("%d",&P[i]);
	rep(i,1,n)scanf("%d",&Q[i]);
	rep(i,1,n)B[i]=P[Q[i]];
	//rep(i,1,n)printf("%d ",B[i]);printf("\n");
	rep(i,1,n)P[Q[i]]=i;
	//rep(i,1,n)printf("%d ",P[i]);printf("\n");
	rep(i,1,n)if(ok(i))Queue.push(i);
	while(!Queue.empty()){
		i=Queue.top();Queue.pop();
		if(!ok(i))continue;
		p=P[i];q=Q[i];
		swap(B[p],B[i]);
		//printf("%d <- %d <- %d\n",p,i,q);fflush(stdout);
		Q[p]=q;P[q]=p;
		P[i]=Q[i]=i;
		S[++s]=make_pair(p,i);
		if(ok(q))Queue.push(q);
	}
	rep(i,1,n)if(P[i]!=i&&P[i]==Q[i]){
		p=P[i];
		if(A[i]<=B[i]||A[p]<=B[p]){puts("-1");return;}
		P[i]=Q[i]=i;
		P[p]=Q[p]=p;
		S[++s]=make_pair(p,i);
	}
	rep(i,1,n)if(P[i]!=i){puts("-1");return;}
	printf("%d\n",s);
	rep(i,1,s)printf("%d %d\n",S[i].first,S[i].second);
}
int main(){
	//freopen("1.in","r",stdin);
	//freopen("1.out","w",stdout);
	ac();
	return 0;
}