#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:264777216")
const int size = 10010;
struct tpo {
  double x, y, z;
} s[size], pot;
double vp, vs;
double getLen(tpo a1, tpo a2) {
  double x = a1.x - a2.x;
  double y = a1.y - a2.y;
  double z = a1.z - a2.z;
  return sqrtl(x * x + y * y + z * z);
}
double fun(tpo a1, tpo a2, tpo p, double t, double sumT) {
  double _t = vs * t / getLen(a1, a2);
  tpo a;
  a.x = a1.x + (a2.x - a1.x) * _t;
  a.y = a1.y + (a2.y - a1.y) * _t;
  a.z = a1.z + (a2.z - a1.z) * _t;
  double ss = getLen(a1, a) / vs;
  double len = getLen(p, a);
  len /= vp;
  return (len - sumT - t);
}
void Solve() {
  int n;
  cin >> n;
  for (int i = 0; i < n + 1; ++i) {
    cin >> s[i].x >> s[i].y >> s[i].z;
  }
  cin >> vp >> vs;
  cin >> pot.x >> pot.y >> pot.z;
  const double eps = 1e-8;
  double t = 0;
  bool isRes = false;
  tpo point;
  for (int i = 0; i < n; ++i) {
    double st = 0;
    double et = getLen(s[i], s[i + 1]) / vs;
    for (int j = 0; j < 256; ++j) {
      double mid1 = (st + et) / 2;
      double tim1 = fun(s[i], s[i + 1], pot, mid1, t);
      if (tim1 <= 0) {
        et = mid1;
      } else {
        st = mid1;
      }
    }
    if (fun(s[i], s[i + 1], pot, (st + et) / 2, t) < eps) {
      t += (st + et) / 2;
      tpo a1 = s[i];
      tpo a2 = s[i + 1];
      double _t = vs * (st + et) / 2 / getLen(a1, a2);
      point.x = a1.x + (a2.x - a1.x) * _t;
      point.y = a1.y + (a2.y - a1.y) * _t;
      point.z = a1.z + (a2.z - a1.z) * _t;
      isRes = true;
      break;
    }
    t += getLen(s[i], s[i + 1]) / vs;
  }
  if (isRes) {
    cout << "YES" << endl;
    printf("%.10lf\n", t);
    printf("%.10lf %.10lf %.10lf", point.x, point.y, point.z);
  } else
    cout << "NO" << endl;
}
int main() {
  Solve();
  return 0;
}
