#include <bits/stdc++.h>
using namespace std;
int n, m;
int k;
bool debug = false;
struct Point {
  double x, y, z;
  Point() {}
  Point(double x, double y, double z) : x(x), y(y), z(z) {}
  double abs() const { return sqrt(x * x + y * y + z * z); }
  Point operator*(double o) const { return Point(x * o, y * o, z * o); }
  Point operator+(const Point& o) const {
    return Point(x + o.x, y + o.y, z + o.z);
  }
  Point operator-(const Point& o) const {
    return Point(x - o.x, y - o.y, z - o.z);
  }
  Point scale(double o) const { return *this * (o / abs()); }
  Point cross(Point b) const {
    return Point(y * b.z - z * b.y, z * b.x - x * b.z, x * b.y - y * b.x);
  }
  double dot(Point b) const { return x * b.x + y * b.y + z * b.z; }
  void pp() const { printf("x: %lf, y: %lf, z: %lf\n", x, y, z); }
};
bool ge(double x) { return x > 1e-8 || abs(x) < 1e-8; }
bool le(double x) { return x < -1e-8 || abs(x) < 1e-8; }
double ax, ay, az, vx, vy, vz, R, v, r;
Point vv, xo, tmp;
Point dd(Point p) { return vv * (p.dot(vv) / vv.abs() / vv.abs()); }
bool isOriRight(Point newp) {
  return !(newp.x * vv.x < 0 || newp.y * vv.y < 0 || newp.z * vv.z < 0);
}
double getrt(Point p, double dis) {
  Point newp = dd(p);
  if (!isOriRight(newp - vv)) return -1;
  double mind = (newp - p).abs(), newl = (newp).abs();
  if (mind - dis > 1e-8) return -1;
  if (abs(mind - dis) < 1e-8) {
    return newp.abs() / v;
  }
  double dis1 = sqrt(dis * dis - mind * mind);
  return (newl - dis1) / v;
}
double tt = -1, t;
void sett() {
  if (tt < 0)
    tt = t;
  else if (t > -1)
    tt = min(tt, t);
}
int main() {
  scanf("%lf%lf%lf%lf%lf%lf%lf", &ax, &ay, &az, &vx, &vy, &vz, &R);
  vv = Point(vx, vy, vz);
  v = vv.abs();
  Point o = Point(ax, ay, az);
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf%lf%lf%d", &xo.x, &xo.y, &xo.z, &r, &m);
    xo = xo - o;
    t = getrt(xo, R + r);
    sett();
    for (int j = 0; j < m; j++) {
      scanf("%lf%lf%lf", &tmp.x, &tmp.y, &tmp.z);
      t = getrt(tmp + xo, R);
      sett();
    }
  }
  if (tt < 0)
    puts("-1");
  else
    printf("%.10lf\n", tt);
  return 0;
}
