#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y, z;
};
double len[10000];
double sum[10000];
int n;
Point point[10001], potter;
double vp, vs;
double getDist(Point &a, Point &b) {
  double x = a.x - b.x;
  double y = a.y - b.y;
  double z = a.z - b.z;
  return sqrt(x * x + y * y + z * z);
}
double getGapConst(Point &tar, Point &vec) {
  if (!(abs(vec.x - 0.0) < 1e-10)) return tar.x / vec.x;
  if (!(abs(vec.y - 0.0) < 1e-10)) return tar.y / vec.y;
  return tar.z / vec.z;
}
int main(void) {
  scanf("%d", &n);
  for (int i = 0; i <= n; i++)
    scanf("%lf %lf %lf", &point[i].x, &point[i].y, &point[i].z);
  scanf("%lf %lf", &vp, &vs);
  scanf("%lf %lf %lf", &potter.x, &potter.y, &potter.z);
  if ((abs(point[0].x - potter.x) < 1e-10) &&
      (abs(point[0].y - potter.y) < 1e-10) &&
      (abs(point[0].z - potter.z) < 1e-10)) {
    printf("YES\n");
    printf("0\n");
    printf("%lf %lf %lf\n", potter.x, potter.y, potter.z);
    return 0;
  }
  for (int i = 0; i < n; i++) {
    len[i] = getDist(point[i], point[i + 1]);
    if (i == 0)
      sum[i] = 0;
    else
      sum[i] = sum[i - 1] + len[i - 1];
  }
  bool isFound = false;
  for (int i = 0; i < n; i++) {
    Point vec;
    vec.x = point[i + 1].x - point[i].x;
    vec.y = point[i + 1].y - point[i].y;
    vec.z = point[i + 1].z - point[i].z;
    double startRatio = sum[i] / len[i];
    Point start;
    start.x = point[i].x - startRatio * vec.x;
    start.y = point[i].y - startRatio * vec.y;
    start.z = point[i].z - startRatio * vec.z;
    Point unit;
    unit.x = vec.x / len[i];
    unit.y = vec.y / len[i];
    unit.z = vec.z / len[i];
    double s = 0, e = 1, mid;
    for (int q = 0; q < 40; q++) {
      mid = (s + e) / 2;
      Point tar;
      tar.x = point[i].x + vec.x * mid;
      tar.y = point[i].y + vec.y * mid;
      tar.z = point[i].z + vec.z * mid;
      double dist = getDist(tar, potter);
      double reqTime = dist / vp;
      Point snitch;
      snitch.x = start.x + unit.x * vs * reqTime;
      snitch.y = start.y + unit.y * vs * reqTime;
      snitch.z = start.z + unit.z * vs * reqTime;
      Point gap;
      gap.x = snitch.x - point[i].x;
      gap.y = snitch.y - point[i].y;
      gap.z = snitch.z - point[i].z;
      double gapConst = getGapConst(gap, vec);
      if ((abs(mid - gapConst) < 1e-10)) {
        isFound = true;
        printf("YES\n");
        printf("%.10lf\n", reqTime);
        printf("%.10lf %.10lf %.10lf\n", tar.x, tar.y, tar.z);
        break;
      } else if (mid > gapConst)
        e = mid;
      else
        s = mid;
    }
    if (isFound) break;
  }
  if (!isFound) printf("NO\n");
  return 0;
}
