WA on #1,#3,#9
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 4050;
struct node{int x,y;} a[N];
int n,row,line,f[N];
int minn(int x,int y){return x<y?x:y;}
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
double dis(node x,node y){return (x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y);}
bool check(double x){
for(int i = 0;i < N;i++){f[i] = i;}
for(int i = 1;i <= n;i++){
for(int j = i+1;j <= n;j++){
if(dis(a[i],a[j])<=4.0*x*x){
int t1 = find(i),t2 = find(j);
if(t1!=t2) f[t1] = t2;
}
}
}
for(int i = 1;i <= n;i++){
int t1 = find(i);
if(a[i].x<=x){
int t2 = find(3001);
if(t1!=t2) f[t1] = t2;
}
if(a[i].y<=x){
int t2 = find(3002);
if(t1!=t2) f[t1] = t2;
}
if(a[i].x+x>=row){
int t2 = find(3003);
if(t1!=t2) f[t1] = t2;
}
if(a[i].y+x>=line){
int t2 = find(3004);
if(t1!=t2) f[t1] = t2;
}
}
int t1=find(3001),t2=find(3002),t3=find(3003),t4=find(3004);
if(t1==t2||t3==t4||t2==t4||t1==t3) return 0;
else return 1;
}
signed main(){
scanf("%lld%lld%lld",&n,&row,&line);
for(int i = 1;i <= n;i++){scanf("%lld%lld",&a[i].x,&a[i].y);}
double l = 0,r = minn(row,line);
while(fabs(r-l)>0.00001){
double mid = (l+r)/2;
//printf("%.2lf %.2lf %.2lf\n",l,mid,r);
if(check(mid)){l = mid;}
else{r = mid;}
}
printf("%.2lf",l);
return 0;
}