#include <bits/stdc++.h>
using namespace std;
using namespace rel_ops;
const double PI = acos((double)-1);
int ts, ts2, ts3, ts4;
int n;
long long gcd(long long x, long long y) {
  long long t;
  for (; y != 0;) {
    t = x % y;
    x = y;
    y = t;
  }
  return x;
}
double sqr(double x) { return x * x; }
double ans = 1E14;
double stx, sty, stz, deathr, vx, vy, vz;
inline char equ(double x, double y) {
  if (fabs(x - y) < 1E-10)
    return 0;
  else if (x < y)
    return -1;
  else
    return 1;
}
class point {
 public:
  double x, y, z;
  point() { x = y = z = 0; }
  point(double a, double b, double c) { x = a, y = b, z = c; }
  inline friend point operator+(point A, point B) {
    return point(A.x + B.x, A.y + B.y, A.z + B.z);
  }
  inline friend point operator-(point A, point B) {
    return point(A.x - B.x, A.y - B.y, A.z - B.z);
  }
  inline friend point operator*(point A, double p) {
    return point(A.x * p, A.y * p, A.z * p);
  }
  inline friend point operator/(point A, double p) {
    return point(A.x / p, A.y / p, A.z / p);
  }
  inline friend bool operator<(point A, point B) {
    return A.x < B.x - 1E-10 ||
           fabs(A.x - B.x) < 1E-10 &&
               (A.y < B.y - 1E-10 ||
                (fabs(A.y - B.y) < 1E-10 && A.z < B.z - 1E-10));
  }
  inline friend bool operator==(point A, point B) {
    return equ(A.x, B.x) && equ(A.y, B.y) && equ(A.z, B.z);
  }
};
class XL {
 public:
  point a, b;
  XL() {}
  XL(point x, point y) {
    a = x;
    b = y;
  }
  XL(double t1, double t2, double t5, double t3, double t4, double t6) {
    a = point(t1, t2, t5);
    b = point(t3, t4, t6);
  }
};
inline point chaji(point A, point B) {
  return point(A.y * B.z - A.z * B.y, A.z * B.x - A.x * B.z,
               A.x * B.y - A.y * B.x);
}
inline double dianji(point A, point B) {
  return A.x * B.x + A.y * B.y + A.z * B.z;
}
inline double chaji(point A, point B, point C) {
  return dianji(chaji(A, B), C);
}
inline double dis(point A, point B) {
  return sqrt(sqr(A.x - B.x) + sqr(A.y - B.y) + sqr(A.z - B.z));
}
inline double dis(XL A) { return dis(A.a, A.b); }
inline double disx(point A) { return sqrt(sqr(A.x) + sqr(A.y) + sqr(A.z)); }
inline double Atan2(point A) { return atan2(A.y, A.x); }
inline point shengcheng(double JD, double CD = 1.0) {
  return point(cos(JD) * CD, sin(JD) * CD, 0);
}
inline point rotate_x(point A, double sin, double cos) {
  return point(A.x, A.y * cos - A.z * sin, A.y * sin + A.z * cos);
}
inline point rotate_x(point A, double alp) {
  return rotate_x(A, sin(alp), cos(alp));
}
inline point rotate_y(point A, double sin, double cos) {
  return point(A.x * cos + A.z * sin, A.y, -A.x * sin + A.z * cos);
}
inline point rotate_y(point A, double alp) {
  return rotate_y(A, sin(alp), cos(alp));
}
inline point rotate_z(point A, double sin, double cos) {
  return point(A.x * cos - A.y * sin, A.x * sin + A.y * cos, A.z);
}
inline point rotate_z(point A, double alp) {
  return rotate_z(A, sin(alp), cos(alp));
}
void update(double x) {
  if (x >= -1E-10) ans = min(ans, x);
}
point a[105][105];
double r[105][105];
void can(double x1, double y1, double z1, double r1) {
  double u1, u2, u3, u4, u5, u6, u7, u8, u9;
  double nwx, nwy, nwz, nwr;
  nwx = stx - x1;
  nwy = sty - y1;
  nwz = stz - z1;
  nwr = r1 + deathr;
  u3 = sqr(vx) + sqr(vy) + sqr(vz);
  u4 = 2 * (nwx * vx + nwy * vy + nwz * vz);
  u5 = sqr(nwx) + sqr(nwy) + sqr(nwz) - sqr(nwr);
  u6 = u4 * u4 - 4 * u3 * u5;
  if (u6 < -1E-10) return;
  u6 = max(u6, 0.);
  u7 = (-u4 + sqrt(u6)) / (2 * u3), u8 = (-u4 - sqrt(u6)) / (2 * u3);
  update(u7);
  update(u8);
}
int m[101];
int main() {
  int i, j, k, l, t1, t2, t3, t4, t5, t6, t7, t8, t9, t, nw;
  double nwx, nwy, nwz, nwr, tx, ty, tz;
  int tt1, tt2, tt3, tt4;
  double u1, u2, u3, u4, u5, u6, u7, u8, u9;
  char c1, c2, c3;
  ios::sync_with_stdio(0);
  srand((unsigned)time(0));
  cin >> stx >> sty >> stz >> vx >> vy >> vz >> deathr;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> a[i][0].x >> a[i][0].y >> a[i][0].z >> r[i][0] >> m[i];
    for (j = 1; j <= m[i]; j++) {
      cin >> a[i][j].x >> a[i][j].y >> a[i][j].z;
      a[i][j].x += a[i][0].x;
      a[i][j].y += a[i][0].y;
      a[i][j].z += a[i][0].z;
    }
  }
  for (i = 1; i <= n; i++) {
    for (j = 0; j <= m[i]; j++) can(a[i][j].x, a[i][j].y, a[i][j].z, r[i][j]);
  }
  if (ans == 1E14)
    printf("-1\n");
  else
    printf("%.10lf\n", max(0., ans));
  return 0;
}
