#include <bits/stdc++.h>
const double eps = 1e-15;
const int N = 10000 + 10;
struct node {
  double x, y, z;
  node() {}
  node(double _x, double _y, double _z) {
    x = _x;
    y = _y;
    z = _z;
  }
};
node a[N], st;
int n;
double Time[N], len[N], v1, v2;
double sqr(double x) { return x * x; }
bool eq(double x, double y) { return fabs(x - y) <= eps; }
double D(node i, node j) {
  return sqrt(sqr(i.x - j.x) + sqr(i.y - j.y) + sqr(i.z - j.z));
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i <= n; ++i) scanf("%lf%lf%lf", &a[i].x, &a[i].y, &a[i].z);
  scanf("%lf%lf", &v1, &v2);
  scanf("%lf%lf%lf", &st.x, &st.y, &st.z);
  if (eq(st.x, a[0].x) && eq(st.y, a[0].y) && eq(st.z, a[0].z)) {
    puts("YES");
    puts("0");
    printf("%.10f %.10f %.10f\n", a[0].x, a[0].y, a[0].z);
  } else {
    Time[0] = 0;
    for (int i = 1; i <= n; ++i) {
      len[i] = D(a[i - 1], a[i]);
      Time[i] = Time[i - 1] + len[i] / v2 + eps;
    }
    int idx = -1;
    for (int i = 1; i <= n; ++i)
      if (D(st, a[i]) <= Time[i] * v1 + eps) {
        idx = i;
        break;
      }
    if (idx == -1)
      puts("NO");
    else {
      puts("YES");
      double L = len[idx] / v2;
      double dx = a[idx - 1].x - a[idx].x, dy = a[idx - 1].y - a[idx].y,
             dz = a[idx - 1].z - a[idx].z;
      double l = 0, r = len[idx] / v2, mid;
      for (int i = 0; i < 100; ++i) {
        mid = (l + r) / 2;
        if (D(node(a[idx].x + dx * mid / L + eps, a[idx].y + dy * mid / L + eps,
                   a[idx].z + dz * mid / L + eps),
              st) <= v1 * (Time[idx] - mid) + eps)
          l = mid;
        else
          r = mid;
      }
      printf("%.10f\n", Time[idx] - l);
      printf("%.10f %.10f %.10f\n", a[idx].x + dx * l / L + eps,
             a[idx].y + dy * l / L + eps, a[idx].z + dz * l / L + eps);
    }
  }
  return 0;
}
