#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:65777216")
using namespace std;
int n, m;
int x[1111], y[1111], z[1111];
pair<double, double> p[1111];
const double eps = 1e-6;
void parse(int A, int B, int C, double &x, double &y, double &z) {
  double t = (A * x + B * y + C * z) / (A * A + B * B + C * C);
  x -= A * t;
  y -= B * t;
  z -= C * t;
}
pair<double, double> project(int A, int B, int C, double x, double y,
                             double z) {
  parse(A, B, C, x, y, z);
  if (B == 0 && C == 0) return pair<double, double>(y, z);
  double xx = 1, yy = 0, zz = 0;
  if (B)
    yy = (-A) / double(B);
  else if (C)
    zz = (-A) / double(C);
  double d1 = sqrt(x * x + y * y + z * z + 0.);
  if (d1 < eps) return pair<double, double>(0., 0.);
  double d2 = sqrt(B * B + C * C + 0.);
  double d3 = sqrt(x * x + (y - C) * (y - C) + (z + B) * (z + B));
  double a = (d1 * d1 + d2 * d2 - d3 * d3) / (2 * d1 * d2);
  a = acos(a);
  if (x < 0) a = -a;
  return pair<double, double>(d1 * cos(a), d1 * sin(a));
}
bool good(int A, int B, int C, double r) {
  double X = p[0].first;
  double Y = p[0].second;
  for (int i(1); i < (n); i++) {
    if ((X - p[i].first) * (X - p[i].first) +
            (Y - p[i].second) * (Y - p[i].second) <=
        (r + eps) * (r + eps) + eps)
      continue;
    bool found = 0;
    for (int j(0); j < (i); j++) {
      double d = (p[j].first - p[i].first) * (p[j].first - p[i].first) +
                 (p[j].second - p[i].second) * (p[j].second - p[i].second);
      if (d > 4 * r * r + eps) return 0;
      double dx = p[j].first - p[i].first, dy = p[j].second - p[i].second;
      swap(dx, dy);
      dx = -dx;
      double z = sqrt(max(0., (r * r - d / 4) / (dx * dx + dy * dy)));
      dx *= z;
      dy *= z;
      for (int up(0); up < (2); up++) {
        X = (p[i].first + p[j].first) / 2 + (up ? -1 : 1) * dx,
        Y = (p[i].second + p[j].second) / 2 + (up ? -1 : 1) * dy;
        bool g = 1;
        for (int k(0); k < (i + 1); k++)
          if ((X - p[k].first) * (X - p[k].first) +
                  (Y - p[k].second) * (Y - p[k].second) >
              (r + eps) * (r + eps) + eps) {
            g = 0;
            break;
          }
        if (g) {
          found = 1;
          break;
        }
      }
      if (found) break;
    }
    if (!found) return 0;
  }
  return 1;
}
double solve(int A, int B, int C) {
  for (int i(0); i < (n); i++) p[i] = project(A, B, C, x[i], y[i], z[i]);
  random_shuffle(p, p + n);
  double a = 0;
  double b = 1e5;
  for (int _it(0); _it < (40); _it++) {
    double s = (a + b) / 2;
    if (good(A, B, C, s))
      b = s;
    else
      a = s;
  }
  return b;
}
int main() {
  cin >> n >> m;
  for (int i(0); i < (n); i++) scanf("%d %d %d", x + i, y + i, z + i);
  for (int i(0); i < (m); i++) {
    int A, B, C;
    scanf("%d %d %d", &A, &B, &C);
    printf("%.10lf\n", solve(A, B, C));
  }
  return 0;
}
