#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T& x) {
  bool fu = 0;
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  if (c == '-') fu = 1, c = getchar();
  for (x = 0; c > 32; c = getchar()) x = x * 10 + c - '0';
  if (fu) x = -x;
};
template <class T>
inline void read(T& x, T& y) {
  read(x);
  read(y);
}
template <class T>
inline void read(T& x, T& y, T& z) {
  read(x);
  read(y);
  read(z);
}
inline char getc() {
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  return c;
}
const int N = 10010;
const double pi = 2 * acos(0);
const double eps = 1e-9;
int w, h, n, m, i, j, st, g;
double L0, R0, R;
long long x[N], y[N];
double d[1010][1010], an[1010][1010];
int p[N];
double c[N];
double D(int i, int j) {
  return sqrt((1LL * (x[i] - x[j]) * (x[i] - x[j])) +
              (1LL * (y[i] - y[j]) * (y[i] - y[j])));
}
double geta(int i, int j) { return atan2(y[j] - y[i], x[j] - x[i]); }
bool same(double a, double b) { return abs(a - b) <= eps; }
double ans;
void add(double L, double R) {
  if (R > pi) {
    add(L, pi);
    add(-pi, R - 2 * pi);
  } else if (L < -pi) {
    add(L + 2 * pi, pi);
    add(-pi, R);
  } else
    c[++g] = L - 1e-15, c[++g] = R + 1e-15;
}
bool cmp(int x, int y) { return c[x] < c[y]; }
bool ok(double R) {
  int i, j, k;
  double tt;
  g = 0;
  c[++g] = -pi;
  c[++g] = pi;
  if (x[st] < R) {
    tt = acos(x[st] / R);
    for (k = 1; k <= 2; k++) add(-pi - tt, -pi + tt);
  }
  if (w - x[st] < R) {
    tt = acos((w - x[st]) / R);
    for (k = 1; k <= 2; k++) add(-tt, tt);
  }
  if (y[st] < R) {
    tt = acos(y[st] / R);
    for (k = 1; k <= 2; k++) add(-pi / 2 - tt, -pi / 2 + tt);
  }
  if (h - y[st] < R) {
    tt = acos((h - y[st]) / R);
    for (k = 1; k <= 2; k++) add(pi / 2 - tt, pi / 2 + tt);
  }
  for (i = 1; i <= n; i++)
    if (i != st && d[st][i] < 2 * R && d[st][i] > eps) {
      tt = acos(d[st][i] / 2 / R);
      add(an[st][i] - tt, an[st][i] + tt);
    }
  for (i = 1; i <= g; i++) p[i] = i;
  sort(p + 1, p + 1 + g, cmp);
  int s = 0;
  for (i = 1; i <= g; i++)
    if ((s += (p[i] & 1 ? 1 : -1)) < 3 && i + 1 <= g &&
        c[p[i + 1]] - c[p[i]] > eps)
      return 1;
  return 0;
}
int main() {
  read(w, h, n);
  for (i = 1; i <= n; i++) cin >> x[i] >> y[i];
  for (i = 1; i <= n; i++) {
    int t = rand() % i + 1;
    swap(x[i], x[t]);
    swap(y[i], y[t]);
  }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++) d[i][j] = D(i, j), an[i][j] = geta(i, j);
  for (st = 1; st <= n; st++)
    if (ok(R)) {
      L0 = R;
      R0 = 2e6;
      while (L0 + eps < R0) {
        R = (L0 + R0) / 2;
        if (ok(R))
          L0 = R;
        else
          R0 = R;
      }
    }
  cout << fixed << setprecision(10) << R << endl;
  scanf("\n");
  return 0;
}
