#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
struct ww {
  double x, y;
  inline void read() { scanf("%lf%lf", &x, &y); }
  inline ww operator-(const ww &A) { return (ww){x - A.x, y - A.y}; }
  inline double com() { return x * x + y * y; }
  inline bool operator==(const ww &A) { return x == A.x && y == A.y; }
} a[1010];
struct w1 {
  double x;
  int z;
} c[1010 * 4];
int i, j, k, n, m, w, h, s, t;
int f[1010], cen[1010], f1[1010], f2[1010], id[1010];
double wei[1010][1010], dis[1010][1010], len[1010];
inline void into(double l, double r, int cen) {
  if (l < -pi)
    into(l + 2 * pi, pi, cen), into(-pi, r, cen);
  else if (r > pi)
    into(l, pi, cen), into(-pi, r - 2 * pi, cen);
  else
    c[++t] = (w1){l, cen}, c[++t] = (w1){r, -cen};
}
inline bool cc1(const w1 &a, const w1 &b) { return a.x < b.x; }
inline double ju(int i, double x) {
  int j;
  s = t = 0;
  for (j = 1; j <= n; j++)
    if (dis[i][j] > 1e-9 && dis[i][j] <= x) {
      double A = acos(dis[i][j] / x);
      into(wei[i][j] - A, wei[i][j] + A, 1);
    }
  if (a[i].x < x) {
    double A = acos(a[i].x / x);
    into(pi - A, pi + A, 5);
  }
  if (a[i].x + x > w) {
    double A = acos((w - a[i].x) / x);
    into(-A, A, 5);
  }
  if (a[i].y < x) {
    double A = acos(a[i].y / x);
    into(-pi / 2 - A, -pi / 2 + A, 5);
  }
  if (a[i].y + x > h) {
    double A = acos((h - a[i].y) / x);
    into(pi / 2 - A, pi / 2 + A, 5);
  }
  c[++t] = (w1){pi, 0};
  c[++t] = (w1){-pi, 0};
  sort(c + 1, c + t + 1, cc1);
  int sum = 0;
  for (j = 1; j <= t; j++) {
    if (j > 1 && sum < 2 && (j == 1 || c[j].x > c[j - 1].x + 1e-9)) return 1;
    sum += c[j].z;
  }
  return 0;
}
int main() {
  cin >> w >> h >> n;
  for (int i = 1; i <= n; i++) {
    scanf("%lf%lf", &a[i].x, &a[i].y);
    id[i] = i;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      ww o = a[j] - a[i];
      wei[i][j] = atan2(o.y, o.x);
      dis[i][j] = sqrt(o.com()) / 2.0;
    }
  }
  double l = sqrt(2.0) / 2.0, r = 2e6;
  random_shuffle(id + 1, id + n + 1);
  for (int i = 1; i <= n; i++) {
    int j = id[i];
    if (!ju(j, l)) continue;
    double r = 2e6, mid;
    for (int q = 0; q < 50; q++) {
      mid = (l + r) / 2.0;
      if (ju(j, mid))
        l = mid;
      else
        r = mid;
    }
    l = (l + r) / 2.0;
  }
  cout << fixed << setprecision(10) << l << endl;
}
