#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int w = 0, x = 0;
  char c = getchar();
  while (!isdigit(c)) w |= c == '-', c = getchar();
  while (isdigit(c)) x = x * 10 + (c ^ 48), c = getchar();
  return w ? -x : x;
}
namespace star {
const int maxn = 1005;
const double INF = 1e100;
struct point {
  double x, y, l;
  point(double x = 0, double y = 0) : x(x), y(y) {}
  bool operator<(const point &b) const { return l > b.l; }
} a[2][maxn], p[maxn];
int n;
inline double dis(point a, point b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
void calc(point &x) {
  double mn = INF, pmn = INF, d;
  for (int i = 1; i <= n; i++) {
    d = dis(x, p[i]);
    if (d < pmn) swap(d, pmn);
    if (mn > pmn) swap(mn, pmn);
  }
  x.l = pmn;
}
inline void work() {
  int w = read(), h = read();
  n = read();
  for (int i = 1; i <= n; i++) p[i].x = read(), p[i].y = read();
  int m = 0;
  for (int i = 0; i < 10; i++)
    for (int j = 0; j < 10; j++)
      a[0][++m] = point(w * (i + 0.5) * 0.1, h * (j + 0.5) * 0.1);
  int o = 0;
  double ans, dx = w * 0.05, dy = h * 0.05;
  for (int t = 1; t <= 10; t++) {
    for (int i = 1; i <= m; i++) calc(a[o][i]);
    sort(a[o] + 1, a[o] + 1 + m);
    ans = a[o][1].l;
    m = 0;
    dx *= 0.1, dy *= 0.1;
    for (int k = 1; k <= 10; k++)
      for (int i = 0; i < 10; i++)
        for (int j = 0; j < 10; j++)
          a[o ^ 1][++m] =
              point(a[o][k].x + dx * (i * 2 - 9), a[o][k].y + dy * (j * 2 - 9));
    o ^= 1;
  }
  printf("%.12f", sqrt(ans));
}
}  // namespace star
signed main() {
  star::work();
  return 0;
}
