#include <bits/stdc++.h>
using namespace std;
int n, vp, vs;
double T, t, x, y, z, ans;
bool flag;
struct Point {
  double x, y, z;
} point[10010], p, l, r, mid;
double dis(Point p1, Point p2) {
  return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y) +
              (p1.z - p2.z) * (p1.z - p2.z));
}
struct Line {
  Point p1, p2;
  double d;
  double ti;
} line[10010];
int main() {
  while (cin >> n) {
    for (int i = 0; i <= n; i++) {
      scanf("%lf%lf%lf", &point[i].x, &point[i].y, &point[i].z);
    }
    scanf("%d%d", &vp, &vs);
    for (int i = 1; i <= n; i++) {
      line[i].p1 = point[i - 1];
      line[i].p2 = point[i];
      line[i].d = dis(line[i].p1, line[i].p2);
      line[i].ti = line[i].d / vs;
    }
    scanf("%lf%lf%lf", &p.x, &p.y, &p.z);
    t = 0;
    T = 0;
    flag = false;
    for (int i = 1; i <= n; i++) {
      t += line[i].ti;
      if (fabs(dis(p, line[i].p2) / vp - t) < 1e-6) {
        flag = true;
        x = line[i].p2.x;
        y = line[i].p2.y;
        z = line[i].p2.z;
        ans = t;
        break;
      } else {
        if (dis(p, line[i].p2) / vp < t) {
          flag = true;
          l = line[i].p1;
          r = line[i].p2;
          for (int k = 0; k < 200; k++) {
            mid.x = (l.x + r.x) / 2;
            mid.y = (l.y + r.y) / 2;
            mid.z = (l.z + r.z) / 2;
            if (dis(mid, p) / vp <=
                dis(mid, line[i].p1) / line[i].d * line[i].ti + T) {
              r = mid;
            } else {
              l = mid;
            }
          }
          x = l.x;
          y = l.y;
          z = l.z;
          ans = dis(mid, line[i].p1) / line[i].d * line[i].ti + T;
          break;
        }
      }
      T += line[i].ti;
    }
    if (flag) {
      printf("YES\n");
      printf("%.10lf\n", ans);
      printf("%.10lf %.10lf %.10lf\n", x, y, z);
    } else {
      printf("NO\n");
    }
  }
  return 0;
}
