#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 10024;
struct point {
  double x, y, z;
};
const double eps = 0.0000000001;
point p[MAX_N], o, e, ans;
double s[MAX_N];
int n, vs, vp;
double dist(point a, point b) {
  double xd = a.x - b.x, yd = a.y - b.y, zd = a.z - b.z;
  return sqrt(xd * xd + yd * yd + zd * zd);
}
bool check(double t) {
  int i = 0;
  while (t * vs > s[i + 1]) i++;
  e.x = p[i].x + (p[i + 1].x - p[i].x) * ((t * vs - s[i]) / (s[i + 1] - s[i]));
  e.y = p[i].y + (p[i + 1].y - p[i].y) * ((t * vs - s[i]) / (s[i + 1] - s[i]));
  e.z = p[i].z + (p[i + 1].z - p[i].z) * ((t * vs - s[i]) / (s[i + 1] - s[i]));
  return t * vp - dist(o, e) >= eps;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i <= n; i++) scanf("%lf %lf %lf", &p[i].x, &p[i].y, &p[i].z);
  scanf("%d %d", &vp, &vs);
  scanf("%lf %lf %lf", &o.x, &o.y, &o.z);
  s[0] = 0;
  for (int i = 1; i <= n; i++) s[i] = s[i - 1] + dist(p[i - 1], p[i]);
  if (dist(o, p[n]) - vp * (s[n] / vs) > eps) {
    printf("NO\n");
    return 0;
  }
  printf("YES\n");
  ans = p[n];
  double l = 0, r = s[n] / vs;
  while (r - l > eps) {
    double mid = (l + r) / 2;
    if (check(mid)) {
      ans = e;
      r = mid;
    } else
      l = mid;
  }
  printf("%.8lf\n", r);
  printf("%.8lf %.8lf %.8lf\n", ans.x, ans.y, ans.z);
  return 0;
}
