#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int MX = 1e3 + 5;
const double e = 2.7182818284590452353602874713527;
struct Node {
  int x, y;
} p[MX];
int n, k, x, y;
double exp(double rd) { return pow(e, 1 - rd); }
int dis(Node& p1) { return (p1.x - x) * (p1.x - x) + (p1.y - y) * (p1.y - y); }
double a[MX], dp[MX][MX], q;
bool ok(double r) {
  int cnt = 0;
  double pr = 1;
  for (int i = 1; i <= n; i++) {
    int d = dis(p[i]);
    if (d <= r * r) cnt++;
    a[i] = exp(d / (r * r));
  }
  if (cnt >= k) return 1;
  memset(dp[0], 0, sizeof(dp[0]));
  dp[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = n; j >= 0; j--) {
      if (dis(p[i]) <= r * r) {
        if (j == 0)
          dp[i][0] = dp[i - 1][0];
        else
          dp[i][j] = dp[i - 1][j];
      } else {
        if (j == 0)
          dp[i][0] = (1 - a[i]) * dp[i - 1][0];
        else
          dp[i][j] = dp[i - 1][j] * (1 - a[i]) + dp[i - 1][j - 1] * a[i];
      }
    }
  }
  double ret = 0;
  for (int i = 0; i < k - cnt; i++) ret += dp[n][i];
  return ret * 1000 <= q;
}
int main() {
  scanf("%d", &n);
  scanf("%d%lf", &k, &q);
  scanf("%d%d", &x, &y);
  int m = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &p[i].x, &p[i].y);
    if (p[i].x == x && p[i].y == y)
      k--;
    else
      p[++m] = p[i];
  }
  n = m;
  if (k <= 0) {
    printf("0.000000\n");
    return 0;
  }
  double l = 0, r = 4000;
  for (int i = 0; i <= 200; i++) {
    double mid = (l + r) / 2;
    if (ok(mid))
      r = mid;
    else
      l = mid;
  }
  printf("%.8f\n", r);
  return 0;
}
