#include <bits/stdc++.h>
using db = double;
int read() {
  int x;
  scanf("%d", &x);
  return x;
}
const int N = 50007;
const db eps = 1e-10;
db x, y, k[N], b[N], ans;
int n, c, t[N * 2], las[N], L[N * 2], R[N * 2];
struct node {
  db ang;
  int id;
} a[N * 2];
db sqr(db a) { return a * a; }
void add(int p, int v) {
  for (; p <= c; p += p & -p) t[p] += v;
}
int ask(int p) {
  int s = 0;
  for (; p; p ^= p & -p) s += t[p];
  return s;
}
int check(db r) {
  db A, B, C, D, X, Y;
  int s = 0;
  c = 0;
  for (int i = 1; i <= n; ++i) {
    A = sqr(k[i]) + 1, B = -2 * x + 2 * k[i] * (b[i] - y),
    C = sqr(x) + sqr(b[i] - y) - sqr(r);
    if (B * B + eps <= 4 * A * C) continue;
    D = sqrt(sqr(B) - 4 * A * C), A *= 2;
    X = (D - B) / A, Y = k[i] * X + b[i], a[++c] = {atan2(Y - y, X - x), i};
    X = (-D - B) / A, Y = k[i] * X + b[i], a[++c] = {atan2(Y - y, X - x), i};
  }
  std::sort(a + 1, a + c + 1,
            [](const node& a, const node& b) { return a.ang < b.ang; });
  for (int i = 1, id; i <= c; ++i)
    las[id = a[i].id] ? s += ask(i) - ask(las[id]), add(las[id], -1),
        las[id] = 0   : (add(i, 1), las[id] = i);
  return s;
}
int pre[100010], nxt[100010], lst;
db cal(int i, int j) {
  db X = (b[j] - b[i]) / (k[i] - k[j]), Y = X * k[i] + b[i];
  return sqrt(sqr(X - x) + sqr(Y - y));
}
int main() {
  db l = 0;
  int m, s = 0;
  n = read(), x = read() / 1000.0, y = read() / 1000.0, m = read();
  for (int i = 1; i <= n; ++i) k[i] = read() / 1000.0, b[i] = read() / 1000.0;
  for (db r = 1e13, mid, i = 100; i > 0; --i)
    check(mid = (l + r) / 2) < m ? l = mid : r = mid;
  check(l);
  for (int i = 1, j = 0, p; i <= c; ++i)
    if (las[a[i].id]) {
      for (p = j; p > las[a[i].id]; p = L[p]) ++s, ans += cal(a[i].id, a[p].id);
      R[L[p]] = R[p], L[R[p]] = L[p];
      if (p == j) j = L[j];
    } else
      R[j] = i, L[i] = j, j = i, las[a[i].id] = i;
  printf("%.10lf", ans + l * (m - s));
}
