#include <bits/stdc++.h>
using namespace std;
const int M = 10000 + 10;
struct NODE {
  int x;
  int y;
  int z;
} node[M];
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n + 1; i++) {
    cin >> node[i].x >> node[i].y >> node[i].z;
  }
  int vp, vs;
  cin >> vp >> vs;
  int px, py, pz;
  cin >> px >> py >> pz;
  double total_dis = 0;
  for (int i = 1; i < n + 1; i++) {
    double disx2 = (node[i - 1].x - node[i].x) * (node[i - 1].x - node[i].x);
    double disy2 = (node[i - 1].y - node[i].y) * (node[i - 1].y - node[i].y);
    double disz2 = (node[i - 1].z - node[i].z) * (node[i - 1].z - node[i].z);
    total_dis = total_dis + sqrt(disx2 + disy2 + disz2);
  }
  double ts = total_dis / vs;
  double total_pdis = 0;
  total_pdis = total_pdis + (node[n].x - px) * (node[n].x - px) +
               (node[n].y - py) * (node[n].y - py) +
               (node[n].z - pz) * (node[n].z - pz);
  total_pdis = sqrt(total_pdis);
  if (ts < total_pdis / vp) {
    cout << "NO" << endl;
  } else {
    cout << "YES" << endl;
    int num = 0;
    double T_l = 0;
    double T_r = 1E+9;
    double ansx, ansy, ansz;
    while (num <= 100) {
      double T_m = (T_l + T_r) / 2;
      double P_R = vp * T_m;
      double P_s = vs * T_m;
      double dis = 0;
      double res = 0;
      double t_dis = 0;
      int index = -1;
      for (int i = 1; i < n + 1; i++) {
        double dis_x2 =
            (node[i].x - node[i - 1].x) * (node[i].x - node[i - 1].x);
        double dis_y2 =
            (node[i].y - node[i - 1].y) * (node[i].y - node[i - 1].y);
        double dis_z2 =
            (node[i].z - node[i - 1].z) * (node[i].z - node[i - 1].z);
        double cur_dis = sqrt(dis_x2 + dis_y2 + dis_z2);
        if (dis <= P_s && P_s <= dis + cur_dis) {
          index = i;
          res = P_s - dis;
          t_dis = cur_dis;
          break;
        }
        dis = dis + cur_dis;
      }
      if (index == -1) {
        T_r = T_m;
        ansx = node[n].x;
        ansy = node[n].y;
        ansz = node[n].z;
      } else {
        int id = index - 1;
        double lamada = 1 - res / t_dis;
        ansx = lamada * node[id].x + (1 - lamada) * node[index].x;
        ansy = lamada * node[id].y + (1 - lamada) * node[index].y;
        ansz = lamada * node[id].z + (1 - lamada) * node[index].z;
        double dis = (ansx - px) * (ansx - px) + (ansy - py) * (ansy - py) +
                     (ansz - pz) * (ansz - pz);
        dis = sqrt(dis);
        if (dis < P_R) {
          T_r = T_m;
        } else {
          T_l = T_m;
        }
      }
      num++;
    }
    printf("%.10f\n", T_l);
    printf("%.10f %.10f %.10f\n", ansx, ansy, ansz);
  }
  return 0;
}
