#include <bits/stdc++.h>
using namespace std;
struct point {
  long double x, y, z;
};
long double dist(point a, point 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)));
}
long double t;
point a[100001];
long double l, r, m, vp, vs;
point p;
int n;
point get(long double x) {
  point ret;
  long double temp = 0;
  int j = 1;
  while (x >= temp + (dist(a[j], a[j - 1]) / vs) && j <= n) {
    temp += dist(a[j], a[j - 1]) / vs;
    j++;
  }
  ret.x = a[j].x - a[j - 1].x;
  ret.y = a[j].y - a[j - 1].y;
  ret.z = a[j].z - a[j - 1].z;
  long double temp2 = dist(a[j], a[j - 1]) / vs;
  ret.x *= (x - temp) / temp2;
  ret.y *= (x - temp) / temp2;
  ret.z *= (x - temp) / temp2;
  ret.x += a[j - 1].x;
  ret.y += a[j - 1].y;
  ret.z += a[j - 1].z;
  return ret;
}
int main() {
  cin >> n;
  for (int i = 0; i <= n; i++) cin >> a[i].x >> a[i].y >> a[i].z;
  cin >> vp >> vs;
  cin >> p.x >> p.y >> p.z;
  for (int i = 1; i <= n; i++) r += dist(a[i], a[i - 1]) / vs;
  if (r * vp < dist(a[n], p)) {
    cout << "NO\n";
    return 0;
  }
  l = 0;
  while (r - l > 0.0000000001) {
    m = (l + r) / 2.0;
    if (dist(get(m), p) <= vp * m)
      r = m;
    else
      l = m;
  }
  cout << "YES" << endl;
  m = (l + r) / 2.0;
  cout << fixed << m << endl;
  point res = get(m);
  cout << fixed << res.x << ' ' << res.y << ' ' << res.z;
}
