#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T SQR(T a) {
  return a * a;
}
template <typename T>
struct point {
  T x, y, z;
  point(const point<T>& p) {
    x = p.x;
    y = p.y;
    z = p.z;
  }
  point& operator=(const point<T>& p) {
    x = p.x;
    y = p.y;
    z = p.z;
    return *this;
  }
  point(const T& _x, const T& _y) : x(_x), y(_y) {}
  point() : x(0), y(0) {}
  bool operator<(const T& r) { return x == r.x ? y < r.y : x < r.x; }
};
const int INF = numeric_limits<int>::max();
const double eps = 1e-10;
const double PI = 2 * asin(1.0);
point<double> st, newpt;
double getLen(const point<double>& a, const point<double>& b) {
  return sqrt(SQR(a.x - b.x) + SQR(a.y - b.y) + SQR(a.z - b.z));
}
double vp, vs, tpr = 0, time_stmp;
double fk(const point<double>& l, const point<double>& norm, double c) {
  double fc = (tpr + c / vs);
  newpt.x = l.x + c * (norm.x);
  newpt.y = l.y + c * (norm.y);
  newpt.z = l.z + c * (norm.z);
  fc -= getLen(newpt, st) / vp;
  return fc;
}
bool ok = false;
void find(point<double> pl, point<double> pr) {
  ok = false;
  double t, l = 0, r = getLen(pl, pr);
  double svd = r;
  double c1, c2, f1, f2;
  point<double> norm, newpt;
  norm.x = (pr.x - pl.x) / svd;
  norm.y = (pr.y - pl.y) / svd;
  norm.z = (pr.z - pl.z) / svd;
  while (r - l > eps) {
    c1 = l + (r - l) / 3.0;
    c2 = c1 + (r - l) / 3.0;
    f1 = fk(pl, norm, c1);
    f2 = fk(pl, norm, c2);
    if (f1 >= 0.0 && f2 >= 0.0) {
      if (f1 <= f2) {
        r = c1;
      } else {
        l = c2;
      }
    } else {
      if (f1 < f2) {
        l = c1;
      } else {
        r = c2;
      }
    }
  }
  double res = (l + r) / 2.0;
  double fr = fk(pl, norm, res);
  if (fr >= -eps) {
    ok = true;
  }
  time_stmp = tpr + res / vs;
  tpr += svd / vs;
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  scanf("%d", &n);
  vector<point<double> > v(n + 1);
  for (int i = 0; i <= n; ++i) {
    scanf("%le%le%le", &v[i].x, &v[i].y, &v[i].z);
  }
  scanf("%le%le", &vp, &vs);
  scanf("%le%le%le", &st.x, &st.y, &st.z);
  for (int i = 0; i < n; ++i) {
    point<double> pl, pr;
    pl = v[i];
    pr = v[i + 1];
    find(pl, pr);
    point<double> res = newpt;
    if (ok) {
      cout << "YES\n";
      cout << fixed << setprecision(6) << time_stmp << '\n'
           << res.x << ' ' << res.y << ' ' << res.z << endl;
      return false;
    }
  }
  cout << "NO\n";
  return 0;
}
