#include <bits/stdc++.h>
using namespace std;
int x[10001], y[10001], z[10001];
int n, vp, vs, px, py, pz;
long double get_dis(int x1, int y1, int z1, int x2, int y2, int z2) {
  return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) +
              (z1 - z2) * (z1 - z2));
}
bool can_reach(long double x, long double y, long double z, long double t) {
  return (x - px) * (x - px) + (y - py) * (y - py) + (z - pz) * (z - pz) <=
         t * t * vp * vp;
}
void get_position(long double k, long double *tx, long double *ty,
                  long double *tz) {
  long double t = 1;
  int i;
  for (i = 1; i <= n; i++) {
    t = get_dis(x[i - 1], y[i - 1], z[i - 1], x[i], y[i], z[i]) / vs;
    if (t < k)
      k -= t;
    else
      break;
  }
  *tx = (x[i] - x[i - 1]) * k / t + x[i - 1];
  *ty = (y[i] - y[i - 1]) * k / t + y[i - 1];
  *tz = (z[i] - z[i - 1]) * k / t + z[i - 1];
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i <= n; i++) scanf("%d%d%d", &x[i], &y[i], &z[i]);
  scanf("%d%d", &vp, &vs);
  scanf("%d%d%d", &px, &py, &pz);
  long double left = 0, right = 0, mid = 0;
  for (int i = 1; i <= n; i++)
    right += get_dis(x[i - 1], y[i - 1], z[i - 1], x[i], y[i], z[i]) / vs;
  long double tx, ty, tz;
  get_position(right, &tx, &ty, &tz);
  if (can_reach(tx, ty, tz, right)) {
    while (right - left > 1e-10) {
      mid = (right + left) / 2;
      get_position(mid, &tx, &ty, &tz);
      if (can_reach(tx, ty, tz, mid))
        right = mid;
      else
        left = mid;
    }
    mid = (left + right) / 2;
    get_position(mid, &tx, &ty, &tz);
    cout << "YES\n"
         << fixed << setprecision(9) << mid << "\n"
         << tx << " " << ty << " " << tz << endl;
  } else
    cout << "NO" << endl;
  return 0;
}
