#include <bits/stdc++.h>
using namespace std;
const double e = 2.7182818284590452353602874713527;
const double eps = 1e-6;
const int maxn = 1e2 + 5;
struct P {
  double x, y;
} c[maxn];
int n, k, p;
double l, r, R, f[maxn][maxn], fail[maxn];
double getdis(double x, double y) {
  return sqrt((x - c[0].x) * (x - c[0].x) + (y - c[0].y) * (y - c[0].y));
}
double exp(double a) { return pow(e, a); }
double calc(double D) {
  if (D <= R) return 1.0;
  return exp(1.0 - D * D / (R * R));
}
bool check(double mid) {
  memset(f, 0, sizeof(0));
  f[0][0] = 1.0;
  R = mid;
  for (int i = 1; i <= n; i++) fail[i] = 1.0 - calc(getdis(c[i].x, c[i].y));
  for (int i = 1; i <= n; i++) {
    f[i][0] = f[i - 1][0] * fail[i];
    for (int j = 1; j <= i; j++)
      f[i][j] = f[i - 1][j] * fail[i] + f[i - 1][j - 1] * (1 - fail[i]);
  }
  double tmp = 0.0;
  for (int i = 0; i < k; i++) tmp += f[n][i];
  return tmp <= p / 1000.0;
}
int main() {
  scanf("%d%d%d", &n, &k, &p);
  scanf("%lf%lf", &c[0].x, &c[0].y);
  for (int i = 1; i <= n; i++)
    scanf("%lf%lf", &c[i].x, &c[i].y), r = max(r, getdis(c[i].x, c[i].y));
  double ans;
  while (l + eps <= r) {
    double mid = (l + r) / 2.0;
    if (check(mid)) {
      ans = mid;
      r = mid;
    } else
      l = mid;
  }
  printf("%.12lf\n", ans);
  return 0;
}
