//#include <bits/stdc++.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <limits.h>
#include <algorithm>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <bitset>
#include <string>
using namespace std;
double esp=1e-11;
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#define fi first
#define se second
#define all(a) (a).begin(),(a).end()
#define cle(a) while(!a.empty())a.pop()
#define mem(p) memset(p,0,sizeof(p))
#define memf(p) memset(p,0x3f,sizeof(p))
#define memn(p) memset(p,-1,sizeof(p))
#define mp(A, B) make_pair(A, B)
#define pb push_back
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
typedef long long int LL;
const double PI = acos(-1.0);
const LL INF=0x3f3f3f3f;
const LL MOD =1e9+7;
const int maxn =10100;
int ro[510],rop[510];
int up(int u){return(ro[u]==u)?u:ro[u]=up(ro[u]);}
int p[510][2];
int w,h,n;
bool check(long double d)
{           //printf("%.3f\n",d);
    memcpy(ro,rop,sizeof(rop));
    for(int x=1;x<=n;x++)
    {
        if(p[x][0]*1.0<d)ro[up(501)]=up(x);
        if(w*1.0-p[x][0]<d)ro[up(502)]=up(x);
        if(up(501)==up(502))return 0;
        for(int y=1;y<=n;y++)
            if(x!=y&&((p[x][0]-p[y][0])*1.0*(p[x][0]-p[y][0])+(p[x][1]-p[y][1])*1.0*(p[x][1]-p[y][1]))<4*d*d)
                ro[up(y)]=up(x);
    }
    return up(501)!=up(502);
}
int main()
{
    //freopen("in.txt", "r", stdin);
    //freopen("trees.in", "r", stdin);
    //freopen("trees.out", "w", stdout);
    //map<long long int,int>ma;                 %I64d
    //vector<int>::iterator iter;
    //memset(m,0,sizeof(int));               for(iter=trtr[rt].begin();iter!=trtr[rt].end();iter++)
    //for(int x=1;x<=n;x++)
    //for(int y=1;y<=n;y++)
    //scanf("%d%d",&a,&b);
    //scanf("%d",&n);
    //printf("%d\n",ans);
    scanf("%d%d%d",&w,&h,&n);
    for(int x=1;x<=n;x++)
        scanf("%d%d",&p[x][0],&p[x][1]);
    long double l=0,r=w,m;
    for(int x=0;x<=505;x++)rop[x]=x;
    for(int x=1;x<=200;x++)
    {
        m=(l+r)/2;
        if(check(m))
            l=m;
        else
            r=m;
    }
    printf("%.3f\n",(double)l);
    return 0;
}