#include <bits/stdc++.h>
using namespace std;
double prob[103];
int x[103];
int y[103];
double dp[103][103];
int vis[103][103];
void initdp() { memset(vis, -1, sizeof(vis)); }
double solve(int cur, int failed, int n, int k) {
  if (cur == n) {
    if (failed > (n - k))
      return 1.0;
    else
      return 0.0;
  }
  if (vis[cur][failed] != -1) return dp[cur][failed];
  double p = prob[cur] * solve(cur + 1, failed, n, k) +
             (1.0 - prob[cur]) * solve(cur + 1, failed + 1, n, k);
  vis[cur][failed] = 1;
  return dp[cur][failed] = p;
}
void setProb(int n, double R, int x0, int y0) {
  double R_sq = R * R;
  for (int i = 0; i < n; ++i) {
    int dx = (x[i] - x0);
    int dy = (y[i] - y0);
    double dis_sq = dx * dx + dy * dy;
    if (dis_sq < R_sq || fabs(dis_sq - R_sq) < 1e-10) {
      prob[i] = 1.0;
    } else {
      if (fabs(R) < 1e-10) {
        prob[i] = 0.0;
      } else {
        prob[i] = exp(1.0 - (dis_sq / R_sq));
      }
    }
  }
}
int main() {
  int n, k, ep;
  cin >> n >> k >> ep;
  int x0, y0;
  cin >> x0 >> y0;
  for (int i = 0; i < n; ++i) {
    cin >> x[i] >> y[i];
  }
  double lo = 0.0;
  double hi = 1000000000000.00;
  for (int it = 0; it <= 200; ++it) {
    double R = (lo + hi) / 2.0;
    setProb(n, R, x0, y0);
    initdp();
    double failure_prob = solve(0, 0, n, k);
    if (failure_prob > ((double)ep / (double)1000.00)) {
      lo = R;
    } else {
      hi = R;
    }
  }
  printf("%.8lf\n", lo);
  return 0;
}
