#include<cstdio>
#include<cmath>
#include<algorithm>
int n,xm,ym,ep=0;
int f[3010];
struct pos{int x,y;}ps[3010];
struct edge{int a,b;long long c;}e[10000010];
bool operator<(edge a,edge b){
return a.c<b.c;
}
inline long long min2(long long a,long long b){
a*=a;b*=b;
return a<b?a:b;
}
int get(int x){
int a=x,c;
while(x!=f[x])x=f[x];
while(x!=(c=f[a]))f[a]=x,a=c;
return x;
}
int main(){
scanf("%d%d%d",&n,&xm,&ym);
for(int i=0;i<n;i++){
f[i]=i;
scanf("%d%d",&ps[i].x,&ps[i].y);
e[ep++]=(edge){i,n,4*min2(xm-ps[i].x,ps[i].y-1)};
e[ep++]=(edge){i,n+1,4*min2(ps[i].x-1,ym-ps[i].y)};
for(int j=0;j<i;j++){
long long x=ps[i].x-ps[j].x,y=ps[i].y-ps[j].y;
e[ep++]=(edge){i,j,x*x+y*y};
}
}
f[n]=n;f[n+1]=n+1;
std::sort(e,e+ep);
for(int i=0;i<ep;i++){
int a=get(e[i].a),b=get(e[i].b);
if(a!=b){
f[a]=b;
if(get(n)==get(n+1)){
printf("%.2f\n",sqrt(e[i].c)/2.+1e-8);
return 0;
}
}
}
return 0;
}