#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/stack:16000000")
#pragma warning(disable : 4996)
const int inf = 1 << 25;
const long double eps = 1e-12;
struct Point {
  long double x, y, z;
  Point(long double x, long double y, long double z) : x(x), y(y), z(z) {}
  Point() {}
  Point operator-(const Point& A) const {
    return Point(x - A.x, y - A.y, z - A.z);
  }
  Point operator+(const Point& A) const {
    return Point(x + A.x, y + A.y, z + A.z);
  }
  Point operator*(const long double a) const {
    return Point(x * a, y * a, z * a);
  }
  long double operator~() const { return sqrt(x * x + y * y + z * z); }
};
vector<Point> pts;
Point P;
long double vp, vs;
const Point BAD_POINT(inf, inf, inf);
Point getPoint(long double t) {
  if (t < eps) return pts[0];
  int cur = 1;
  while (t > 0 && cur < pts.size()) {
    long double ct = (~(pts[cur] - pts[cur - 1])) / vs;
    if (ct < t + eps) {
      ++cur;
      t -= ct;
    } else {
      return pts[cur - 1] + (pts[cur] - pts[cur - 1]) * (t / ct);
    }
  }
  return pts[cur - 1];
}
long double getT(const Point& A, const Point& B) { return (~(A - B)) / vp; }
bool can(long double t) {
  Point B = getPoint(t);
  return (~(P - B)) <= t * vp + eps;
}
int main(int argc, char* argv[]) {
  int n;
  cin >> n;
  pts.resize(n + 1);
  for (int i = (0); i < (n + 1); ++i) cin >> pts[i].x >> pts[i].y >> pts[i].z;
  cin >> vp >> vs;
  cin >> P.x >> P.y >> P.z;
  long double total_len = 0;
  for (int i = (1); i < ((int)pts.size()); ++i)
    total_len += ~(pts[i] - pts[i - 1]);
  long double tmax = total_len / vs + eps;
  if (!can(tmax)) {
    printf("NO\n");
    return 0;
  }
  long double tmin = 0;
  for (int iters = (0); iters < (500); ++iters) {
    long double t = (tmin + tmax) * 0.5;
    if (can(t))
      tmax = t;
    else
      tmin = t;
  }
  printf("YES\n");
  cout << setprecision(12);
  cout << fixed;
  cout << tmax << endl;
  Point A = getPoint(tmax);
  cout << A.x << " " << A.y << " " << A.z << endl;
  return 0;
}
