#include <bits/stdc++.h>
const int N = 12500;
using namespace std;
int n;
double vp, vs;
double len;
struct pt {
  double x;
  double y;
  double z;
};
pt tr[N];
pt orig;
double get_dist(pt a, pt 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));
}
pt eval(pt a, pt b, double rat) {
  a.x += (b.x - a.x) * rat;
  a.y += (b.y - a.y) * rat;
  a.z += (b.z - a.z) * rat;
  return a;
}
pt get_point(double need) {
  for (int i = 0; i < n; i++) {
    double D = get_dist(tr[i], tr[i + 1]);
    if (D < need) {
      need -= D;
      continue;
    }
    double rat = need / D;
    return eval(tr[i], tr[i + 1], rat);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i <= n; i++) {
    cin >> tr[i].x >> tr[i].y >> tr[i].z;
  }
  cin >> vp >> vs;
  cin >> orig.x >> orig.y >> orig.z;
  len = 0;
  for (int i = 1; i <= n; i++) len += get_dist(tr[i - 1], tr[i]);
  double d1 = get_dist(orig, tr[n]);
  if (d1 / vp > len / vs + 1e-14) {
    cout << "NO" << endl;
    return 0;
  }
  double l, r;
  l = 0;
  r = len;
  for (int iter = 1; iter <= 70; iter++) {
    double mid = l + r;
    mid /= 2;
    pt P = get_point(mid);
    double time1 = mid / vs;
    double time2 = get_dist(orig, P) / vp;
    if (time2 > time1 + 1e-14)
      l = mid;
    else
      r = mid;
  }
  cout.precision(10);
  cout << "YES" << endl;
  cout << fixed << l / vs << endl;
  pt P = get_point(l);
  cout << P.x << " " << P.y << " " << P.z << endl;
  return 0;
}
