#include <bits/stdc++.h>
using namespace std;
struct node {
  double x, y, z;
} P[10005];
node harry;
double vs, vp;
double distan(node a, node b) {
  double dis = 0;
  dis += (a.x - b.x) * (a.x - b.x);
  dis += (a.y - b.y) * (a.y - b.y);
  dis += (a.z - b.z) * (a.z - b.z);
  return sqrt(dis);
}
int main(void) {
  int n;
  cin >> n;
  for (int i = 0; i <= n; i++) {
    cin >> P[i].x >> P[i].y >> P[i].z;
  }
  cin >> vp >> vs >> harry.x >> harry.y >> harry.z;
  double T = 0;
  for (int i = 1; i <= n; i++) {
    double t = distan(P[i], P[i - 1]) / vs;
    double left = 0;
    double right = t;
    for (int j = 0; j < 100; j++) {
      double mid = (left + right) / 2;
      node M;
      M.x = P[i - 1].x + (P[i].x - P[i - 1].x) * mid / t;
      M.y = P[i - 1].y + (P[i].y - P[i - 1].y) * mid / t;
      M.z = P[i - 1].z + (P[i].z - P[i - 1].z) * mid / t;
      double t1 = T + mid;
      double t2 = distan(M, harry) / vp;
      if (t1 > t2)
        right = mid;
      else
        left = mid;
    }
    node M;
    M.x = P[i - 1].x + (P[i].x - P[i - 1].x) * left / t;
    M.y = P[i - 1].y + (P[i].y - P[i - 1].y) * left / t;
    M.z = P[i - 1].z + (P[i].z - P[i - 1].z) * left / t;
    double t1 = T + left;
    double t2 = distan(M, harry) / vp;
    if (abs(t1 - t2) < 1e-9) {
      cout << "YES" << endl;
      cout << setprecision(10);
      cout << t1 << endl;
      cout << M.x << " " << M.y << " " << M.z << endl;
      return 0;
    }
    T += t;
  }
  cout << "NO" << endl;
  return 0;
}
