#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;
}