#include <bits/stdc++.h>
using namespace std;
int w, h, n;
struct Point {
  int x, y;
} p[1010];
vector<pair<double, int> > evs;
bool check(int cen, double r) {
  evs.clear();
  int cover = 0;
  if (p[cen].y + r > h + 1e-9) {
    double d = sqrt(r * r - (h - p[cen].y) * 1.0 * (h - p[cen].y));
    double a = atan2(d, h - p[cen].y);
    evs.push_back(make_pair(acos(-1) / 2 - a, +2));
    evs.push_back(make_pair(acos(-1) / 2 + a, -2));
  }
  if (p[cen].y - r < 1e-9) {
    double d = sqrt(r * r - (p[cen].y) * 1.0 * (p[cen].y));
    double a = atan2(d, p[cen].y);
    evs.push_back(make_pair(-acos(-1) / 2 - a, +2));
    evs.push_back(make_pair(-acos(-1) / 2 + a, -2));
  }
  if (p[cen].x - r < 1e-9) {
    double d = sqrt(r * r - (p[cen].x) * 1.0 * (p[cen].x));
    double a = atan2(d, p[cen].x);
    evs.push_back(make_pair(acos(-1) - a, +2));
    evs.push_back(make_pair(-acos(-1) + a, -2));
    cover += 2;
  }
  if (p[cen].x + r > w + 1e-9) {
    double d = sqrt(r * r - (w - p[cen].x) * 1.0 * (w - p[cen].x));
    double a = atan2(d, w - p[cen].x);
    evs.push_back(make_pair(-a, +2));
    evs.push_back(make_pair(+a, -2));
  }
  for (int i = 0; i < n; i++) {
    if (i == cen) continue;
    double dist = sqrt((p[i].x - p[cen].x) * 1.0 * (p[i].x - p[cen].x) +
                       (p[i].y - p[cen].y) * 1.0 * (p[i].y - p[cen].y));
    if (dist < 1e-9) continue;
    dist /= 2.0;
    if (dist + 1e-9 > r) continue;
    double d = sqrt(r * r - dist * dist);
    double a = atan2(d, dist);
    double b = atan2(p[i].y - p[cen].y, p[i].x - p[cen].x);
    if ((b - a) < (-acos(-1) + 1e-9)) {
      evs.push_back(make_pair(b - a + acos(-1) + acos(-1), +1));
      cover++;
    } else {
      evs.push_back(make_pair(b - a, +1));
    }
    if ((a + b) > (acos(-1) + 1e-9)) {
      evs.push_back(make_pair(a + b - acos(-1) - acos(-1), -1));
      cover++;
    } else {
      evs.push_back(make_pair(a + b, -1));
    }
  }
  sort(evs.begin(), evs.end());
  for (int i = 0; i < evs.size(); i++) {
    if (cover <= 1) break;
    cover += evs[i].second;
  }
  return cover <= 1;
}
int main() {
  scanf("%d%d%d", &w, &h, &n);
  for (int i = 0; i < n; i++) scanf("%d%d", &p[i].x, &p[i].y);
  random_shuffle(p, p + n);
  double ans = 0.0;
  for (int i = 0; i < n; i++) {
    if (!check(i, ans * (1 + 1e-9))) continue;
    double l = ans, r = max(2.0 * w, 2.0 * h);
    for (int t = 0; t < 60; t++) {
      double mid = (l + r) / 2.0;
      if (check(i, mid))
        l = mid;
      else
        r = mid;
    }
    ans = l;
  }
  printf("%.10lf\n", ans);
  return 0;
}
