0 0 10 10
1
10 0 0 1.57079
0
 -88 -68 -10 -61
5
-64 -55 3.09648 0.28346
-8 -52 2.46781 0.13262
-8 -59 3.02445 0.00119
-40 90 2.37292 0.15686
-29 -34 2.73957 0.18287
0
 0 0 10 10
2
10 0 0 1.57079
10 5 0 0.7854
1
 -100000 -100000 100000 100000
1
100000 0 0 15.70796
0
 -3 -7 -14 2
5
-16 19 2.12587 0.30781
9 -19 3.27418 0.06595
-1 12 0.12414 8.82294
20 10 6.25657 0.77605
-10 17 0.29502 6.31019
5

14.142079
 7.216642
 7.071084
 2828426.5363
 0.0000

#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
};
double dist(point &P, point &Q) {
  double dx = P.x - Q.x, dy = P.y - Q.y;
  return sqrt(dx * dx + dy * dy);
}
double inprod(point &O, point &P, point &Q) {
  return (P.x - O.x) * (Q.x - O.x) + (P.y - O.y) * (Q.y - O.y);
}
point foot(point &P, point &A, point &B) {
  double t = inprod(A, B, P) / inprod(A, B, B);
  point ans = {A.x + (B.x - A.x) * t, A.y + (B.y - A.y) * t};
  return ans;
}
point rotate(point &P, double theta) {
  double x = P.x * cos(theta) - P.y * sin(theta);
  double y = P.x * sin(theta) + P.y * cos(theta);
  point ans = {x, y};
  return ans;
}
double arg(point &P) {
  double ans = atan2(P.y, P.x);
  if (ans < 0.0) ans += 2.0 * acos(-1.0);
  return ans;
}
bool check(point &A, point &C, double v, double w) {
  double t = dist(A, C) / v;
  double theta = arg(C);
  theta = min(theta, 2.0 * acos(-1.0) - theta);
  return (w * t > theta);
}
double func(point A, point B, point P, double a, double w) {
  int iter;
  if (w < 1.0E-6) return 0.0;
  A.x -= P.x;
  A.y -= P.y;
  B.x -= P.x;
  B.y -= P.y;
  A = rotate(A, -a);
  B = rotate(B, -a);
  if (arg(A) > arg(B)) {
    A.y = -A.y;
    B.y = -B.y;
  }
  point O = {0.0, 0.0};
  double low = 0.0, high = 1.0E+7, mid;
  for ((iter) = 0; (iter) < (int)(100); (iter)++) {
    mid = (high + low) / 2.0;
    if (check(A, B, mid, w)) {
      low = mid;
      continue;
    }
    point H = foot(O, A, B);
    double h = dist(O, H);
    if (h * w < mid) {
      double t = sqrt(mid / (h * w) - 1.0);
      point C = {H.x + H.y * t, H.y - H.x * t};
      if (inprod(C, A, B) < 0.0 && check(A, C, mid, w)) {
        low = mid;
        continue;
      }
      point D = {H.x - H.y * t, H.y + H.x * t};
      if (inprod(D, A, B) < 0.0 && check(A, D, mid, w)) {
        low = mid;
        continue;
      }
    }
    high = mid;
  }
  return mid;
}
int main(void) {
  int N, K, i;
  point A, B, P;
  double a, w;
  cin >> A.x >> A.y >> B.x >> B.y;
  cin >> N;
  vector<double> v;
  for ((i) = 0; (i) < (int)(N); (i)++) {
    cin >> P.x >> P.y >> a >> w;
    double tmp = func(A, B, P, a, w);
    v.push_back(tmp);
  }
  cin >> K;
  v.push_back(0.0);
  sort(v.begin(), v.end());
  double ans = v[N - K];
  printf("%.6f\n", ans);
  return 0;
}
