#include <bits/stdc++.h>
using namespace std;
int nextInt() {
  int x;
  scanf("%d", &x);
  return x;
}
string nextString() {
  char s[20];
  scanf("%s", &s);
  return s;
}
const int N = 110;
double dp[N][N];
double prob[N];
double P(double x, double y, double r2) {
  double d2 = x * x + y * y;
  if (d2 <= r2) {
    return 1;
  }
  return exp(1 - d2 / r2);
}
double getProb(vector<double> &x, vector<double> &y, double r, int k) {
  int n = x.size();
  double r2 = r * r;
  for (int i = 0; i < n; ++i) {
    prob[i] = P(x[i], y[i], r2);
  }
  for (int i = 0; i <= n; ++i) {
    dp[i][0] = 1;
  }
  for (int j = 1; j <= k; ++j) {
    dp[n][j] = 0;
  }
  for (int i = n - 1; i >= 0; --i) {
    for (int j = 1; j <= k; ++j) {
      dp[i][j] = prob[i] * dp[i + 1][j - 1] + (1 - prob[i]) * dp[i + 1][j];
    }
  }
  return dp[0][k];
}
int main() {
  int n = nextInt();
  int k = nextInt();
  int eps = 1000 - nextInt();
  double x0 = nextInt();
  double y0 = nextInt();
  vector<double> x(n), y(n);
  for (int i = 0; i < n; ++i) {
    x[i] = nextInt() - x0;
    y[i] = nextInt() - y0;
  }
  double r = 1e6, dr = 0.5 * r;
  while (dr > 1e-12) {
    double p = getProb(x, y, r, k);
    if (p < 0.001 * eps) {
      r += dr;
    } else {
      r -= dr;
    }
    dr *= 0.5;
  }
  printf("%.10lf\n", r);
  return 0;
}
