#include <bits/stdc++.h>
using namespace std;
struct Point {
  int x;
  int y;
  Point() {}
  Point(int a, int b) {
    x = a;
    y = b;
  }
};
int N;
int K;
double dist[100];
double dp[100][101];
Point center;
double Calc(double R) {
  double prob[100];
  for (int n = 0; n < N; n++) {
    if (dist[n] <= R) {
      prob[n] = 1;
    } else {
      prob[n] = exp(1 - (dist[n] * dist[n]) / (R * R));
    }
  }
  memset(dp, 0, sizeof(dp));
  dp[0][0] = 1.0 - prob[0];
  dp[0][1] = prob[0];
  for (int x = 1; x < N; x++) {
    dp[x][0] = dp[x - 1][0] * (1 - prob[x]);
    for (int y = 1; y <= N; y++) {
      dp[x][y] = dp[x - 1][y] * (1 - prob[x]) + dp[x - 1][y - 1] * (prob[x]);
    }
  }
  double sum = 0;
  for (int n = K; n <= N; n++) {
    sum += dp[N - 1][n];
  }
  return 1 - sum;
}
int main() {
  int e;
  scanf("%d", &N);
  scanf("%d %d", &K, &e);
  double prob = (1.0 * e) / (1e3);
  scanf("%d %d", &center.x, &center.y);
  double end = 0;
  for (int n = 0; n < N; n++) {
    int a;
    int b;
    scanf("%d %d", &a, &b);
    dist[n] =
        sqrt((center.x - a) * (center.x - a) + (center.y - b) * (center.y - b));
    end = max(end, dist[n]);
  }
  double begin = 0;
  while (end - begin > 1.0e-7) {
    double mid = (begin + end) / 2.0;
    if (Calc(mid) <= prob) {
      end = mid;
    } else {
      begin = mid;
    }
  }
  printf("%lf\n", end);
}
