#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1015;
const double inf = 1500000;
const int MyConst = 40;
const double eps = 1e-9;
const double pi = acos(-1);
struct point {
  double x, y;
};
struct AnglePoint {
  double ang;
  int ind;
  bool open;
  AnglePoint() {}
  AnglePoint(double _ang, int _ind, bool _open) {
    ang = _ang;
    ind = _ind;
    open = _open;
    if (ang > 2 * pi) ang -= 2 * pi;
    if (ang < 0) ang += 2 * pi;
  }
};
bool operator==(point A, point B) { return (A.x == B.x && A.y == B.y); }
bool compare(AnglePoint X, AnglePoint Y) {
  if (!(X.open ^ Y.open)) return X.ang < Y.ang;
  if (Y.ang - X.ang > eps) return true;
  if (X.ang - Y.ang > eps) return false;
  if (!X.open)
    return true;
  else
    return false;
}
int N;
double W, H;
point p[MAXN];
AnglePoint Angle[2 * MAXN];
double dist(point A, point B) {
  double dx = A.x - B.x;
  double dy = A.y - B.y;
  return sqrt((dx * dx) + (dy * dy));
}
double GetAngle(point A, point B) {
  double trig = (B.x - A.x) / (dist(A, B));
  if (B.y - A.y < 0)
    return (2 * pi - acos(trig));
  else
    return acos(trig);
}
double GetTAngle(double d, double R) { return acos(d / (2 * R)); }
double GetLAngle(double d, double R) { return acos(d / R); }
bool Check(point A, double R) {
  int total = 0;
  int inside = 0;
  for (int i = 1; i <= N; i++) {
    point B = p[i];
    if (A == B) continue;
    if (dist(A, B) > 2 * R) continue;
    double alfa = atan2(B.y - A.y, B.x - A.x);
    double beta = GetTAngle(dist(A, B), R);
    total++;
    Angle[total] = AnglePoint(alfa - beta, total, true);
    total++;
    Angle[total] = AnglePoint(alfa + beta, total, false);
    if (Angle[total].ang < Angle[total - 1].ang) inside++;
  }
  if (A.x < R) {
    double beta = GetLAngle(A.x, R);
    for (int i = 1; i <= 2; i++) {
      total++;
      Angle[total] = AnglePoint(pi - beta, total, true);
      total++;
      Angle[total] = AnglePoint(pi + beta, total, false);
    }
  }
  if (W - A.x < R) {
    double beta = GetLAngle(W - A.x, R);
    for (int i = 1; i <= 2; i++) {
      total++;
      Angle[total] = AnglePoint(0 - beta, total, true);
      total++;
      Angle[total] = AnglePoint(0 + beta, total, false);
      inside++;
    }
  }
  if (A.y < R) {
    double beta = GetLAngle(A.y, R);
    for (int i = 1; i <= 2; i++) {
      total++;
      Angle[total] = AnglePoint(1.5 * pi - beta, total, true);
      total++;
      Angle[total] = AnglePoint(1.5 * pi + beta, total, false);
    }
  }
  if (H - A.y < R) {
    double beta = GetLAngle(H - A.y, R);
    for (int i = 1; i <= 2; i++) {
      total++;
      Angle[total] = AnglePoint(0.5 * pi - beta, total, true);
      total++;
      Angle[total] = AnglePoint(0.5 * pi + beta, total, false);
    }
  }
  if (inside < 2) return true;
  sort(Angle + 1, Angle + total + 1, compare);
  for (int i = 1; i <= total; i++) {
    if (Angle[i].open)
      inside++;
    else
      inside--;
    if (inside < 2) return true;
  }
  return false;
}
int main() {
  cout << fixed << setprecision(15);
  scanf("%lf", &W);
  scanf("%lf", &H);
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) {
    scanf("%lf %lf", &p[i].x, &p[i].y);
  }
  random_shuffle(p + 1, p + N + 1);
  double l = eps, r = min(inf, W + H);
  for (int i = 1; i <= N; i++) {
    if (!Check(p[i], l + l * eps)) continue;
    for (int iterations = 1; iterations <= MyConst; iterations++) {
      double R = (l + r) / 2;
      if (Check(p[i], R))
        l = R;
      else
        r = R;
    }
    r = min(inf, W + H);
  }
  cout << l << endl;
  return 0;
}
