#include <bits/stdc++.h>
using namespace std;
const long double pi = 3.14159265358979323846264338327950288;
typedef struct LINE {
  long double a, b, c;
  long double l, th;
  LINE(long double a = 0, long double b = 0, long double c = 0)
      : a(a), b(b), c(c) {
    if (b != 0) {
      l = abs(c) / sqrt(a * a + b * b);
      th = atan(-1. * a / b);
      if (b * c > 0) {
        th += pi;
      }
      th += pi / 2;
    }
  }
} L;
int N, M;
pair<long double, int> ia[50011 * 2];
L line[50011];
int _x, _y;
int sp[50011];
int bit[50011 * 2], kk[50011], bb[50011];
void add(int x, int k, int n) {
  while (x <= n) {
    bit[x] += k;
    x += x & (-x);
  }
}
int sum(int x) {
  int res = 0;
  while (x) {
    res += bit[x];
    x -= x & (-x);
  }
  return res;
}
long double opt(long double x) {
  while (x < 0) {
    x += 2 * pi;
  }
  while (x >= 2 * pi) {
    x -= 2 * pi;
  }
  return x;
}
long long cnt(long double r) {
  int k = 0;
  for (int i = 0; i < N; i++) {
    if (line[i].l <= r) {
      long double theta = acos(line[i].l / r);
      long double t1 = opt(line[i].th + theta), t2 = opt(line[i].th - theta);
      ia[k++] = pair<long double, int>(min(t1, t2), i << 1);
      ia[k++] = pair<long double, int>(max(t1, t2), (i << 1) + 1);
    }
  }
  sort(ia, ia + k);
  long long res = 0;
  memset(bit, 0, sizeof(bit));
  for (int i = 0; i < k; i++) {
    if (ia[i].second & 1) {
      res += sum(i + 1) - sum(sp[ia[i].second >> 1] + 1);
      add((sp[ia[i].second >> 1]) + 1, -1, k);
    } else {
      sp[ia[i].second >> 1] = i;
      add(i + 1, 1, k);
    }
  }
  return res;
}
long double iadis(int i, int j) {
  long long x = (bb[j] - bb[i]) * 1000ll + (long long)_x * (kk[j] - kk[i]);
  long long y = (long long)kk[i] * bb[j] - (long long)kk[j] * bb[i] +
                (long long)_y * (kk[j] - kk[i]);
  long double res = sqrt((long double)x * x + (long double)y * y) /
                    (abs(kk[i] - kk[j]) * 1000);
  return res;
}
long double cal(long double r) {
  int q1[50011], q2[50011], num = 0, n1 = 0, n2 = 0;
  int k = 0;
  for (int i = 0; i < N; i++) {
    if (line[i].l <= r) {
      long double theta = acos(line[i].l / r);
      long double t1 = opt(line[i].th + theta), t2 = opt(line[i].th - theta);
      ia[k++] = pair<long double, int>(min(t1, t2), i << 1);
      ia[k++] = pair<long double, int>(max(t1, t2), (i << 1) + 1);
    }
  }
  sort(ia, ia + k);
  double res = 0;
  for (int i = 0; i < k; i++) {
    if (ia[i].second & 1) {
      int tmp = ia[i].second >> 1;
      while (q1[--n1] != tmp) {
        q2[n2++] = q1[n1];
        res += iadis(tmp, q1[n1]);
        num++;
      }
      while (n2) {
        q1[n1++] = q2[--n2];
      }
    } else {
      q1[n1++] = ia[i].second >> 1;
    }
    if (num > M) {
      break;
    }
  }
  return res + (M - num) * r;
}
int main() {
  scanf("%d%d%d%d", &N, &_x, &_y, &M);
  for (int i = 0; i < N; i++) {
    scanf("%d%d", &kk[i], &bb[i]);
    line[i] = L((long double)kk[i], -1000.,
                (long double)kk[i] * _x / 1000. - _y + bb[i]);
  }
  long double l = 0, r = 2.1e9;
  for (int _ = 0; _ < 100; _++) {
    long double m = (l + r) / 2;
    if (cnt(m) < M) {
      l = m;
    } else {
      r = m;
    }
  }
  printf("%.9f\n", (double)cal(l));
  return 0;
}
