#include <bits/stdc++.h>
using namespace std;
int n;
long double x[1000], y[1000], w, h;
long double dis[1000][1000], ang[1000][1000];
pair<long double, int> q[20000];
int tot = 0;
void add(long double l, long double r, int d) {
  if (l < 0) {
    add(l + 2 * 3.1415926535897932384626, 2 * 3.1415926535897932384626, d);
    add(0, r, d);
  } else if (r > 2 * 3.1415926535897932384626) {
    add(l, 2 * 3.1415926535897932384626, d);
    add(0, r - 2 * 3.1415926535897932384626, d);
  } else {
    q[tot++] = pair<long double, int>(l, d);
    q[tot++] = pair<long double, int>(r, -d);
  }
}
bool f(int t, long double r, int debug = 0) {
  tot = 0;
  if (x[t] - r < 0)
    add(3.1415926535897932384626 - acos(x[t] / r),
        3.1415926535897932384626 + acos(x[t] / r), 2);
  if (x[t] + r > w) add(-acos((w - x[t]) / r), acos((w - x[t]) / r), 2);
  if (y[t] < r)
    add(1.5 * 3.1415926535897932384626 - acos(y[t] / r),
        1.5 * 3.1415926535897932384626 + acos(y[t] / r), 2);
  if (y[t] + r > h)
    add(0.5 * 3.1415926535897932384626 - acos((h - y[t]) / r),
        0.5 * 3.1415926535897932384626 + acos((h - y[t]) / r), 2);
  for (int i = 0; i < n; i++)
    if (i != t && r > dis[i][t] && (x[t] != x[i] || y[t] != y[i])) {
      long double d = acos(dis[i][t] / r);
      add(ang[t][i] - d, ang[t][i] + d, 1);
    }
  sort(q, q + tot);
  if (q[0].first > 1e-11 ||
      q[tot - 1].first < 2 * 3.1415926535897932384626 - 1e-11)
    return true;
  int sum = 0;
  for (int i = 0; i < tot; i++) {
    sum += q[i].second;
    if ((i + 1) < tot && abs(q[i + 1].first - q[i].first) > 1e-11 && sum <= 1)
      return true;
  }
  return false;
}
int main() {
  cin >> w >> h >> n;
  srand(n);
  for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
  for (int i = 0; i < n; i++) {
    int tmp = rand() % (i + 1);
    swap(x[i], x[tmp]);
    swap(y[i], y[tmp]);
  }
  long double res = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      dis[i][j] = sqrt(((x[i] - x[j]) * (x[i] - x[j])) +
                       ((y[i] - y[j]) * (y[i] - y[j]))) *
                  0.5;
      if (i != j) ang[i][j] = atan2(y[j] - y[i], x[j] - x[i]);
    }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      if (i != j && ang[i][j] < 0) ang[i][j] += 2 * 3.1415926535897932384626;
  for (int i = 0; i < n; i++)
    if (f(i, res + 1e-11 * res)) {
      long double l = res, r = 2e6;
      while (l + 1e-11 < r) {
        res = (l + r) * 0.5;
        if (f(i, res))
          l = res;
        else
          r = res;
      }
    }
  cout << setprecision(16) << fixed << res << endl;
  return 0;
}
