#include <bits/stdc++.h>
struct point {
  double x, y, z, t;
} p[10010], q, o;
double dis(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) +
              (a.z - b.z) * (a.z - b.z));
}
int n;
double vp, vs;
point bi1(point a, point b, double len) {
  point c, d;
  d = a;
  c.t = 0;
  while (dis(a, b) > 1e-8) {
    c.x = (a.x + b.x) / 2;
    c.y = (a.y + b.y) / 2;
    c.z = (a.z + b.z) / 2;
    if (dis(c, d) > len)
      b = c;
    else
      a = c;
  }
  return c;
}
int bi2(int l, int r, double t) {
  int m;
  while (l < r) {
    m = (l + r) / 2;
    if (p[m].t > t + 1e-8)
      r = m;
    else
      l = m + 1;
  }
  return r - 1;
}
int solve(double t) {
  int k;
  k = bi2(0, n, t);
  q = bi1(p[k], p[k + 1], t - p[k].t);
  if (dis(q, o) * vs > t * vp)
    return 1;
  else
    return 0;
}
int main() {
  int i;
  double m, r, l = 0.0;
  scanf("%d%lf%lf%lf", &n, &p[0].x, &p[0].y, &p[0].z);
  p[0].t = 0;
  for (i = 1; i <= n; i++) {
    scanf("%lf%lf%lf", &p[i].x, &p[i].y, &p[i].z);
    p[i].t = p[i - 1].t + dis(p[i], p[i - 1]);
  }
  scanf("%lf%lf", &vp, &vs);
  scanf("%lf%lf%lf", &o.x, &o.y, &o.z);
  r = p[n].t;
  if (r * vp < dis(p[n], o) * vs) {
    printf("NO\n");
    return 0;
  }
  while (l < r - 1e-8) {
    m = (l + r) / 2;
    if (solve(m))
      l = m;
    else
      r = m;
  }
  printf("YES\n%lf\n%lf %lf %lf\n", dis(q, o) / vp, q.x, q.y, q.z);
  return 0;
}
