#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
const int Mod = 1000000007;
const int INF = 0x3f3f3f3f;
const long long LL_INF = 0x3f3f3f3f3f3f3f3f;
const double e = exp(1);
const double PI = acos(-1);
const double ERR = 1e-10;
const double eps = 1e-10;
const double inf = 1e20;
const double pi = acos(-1.0);
const int maxp = 1e5 + 10;
int sgn(double x) {
  if (fabs(x) < eps) return 0;
  if (x < 0) return -1;
  return 1;
}
inline double sqr(double x) { return x * x; }
struct Point {
  double x, y, z;
  Point() {}
  Point(double _x, double _y, double _z) { x = _x, y = _y, z = _z; }
  void input() { scanf("%lf%lf%lf", &x, &y, &z); }
  void output() { cout << "x= " << x << " y= " << y << " z= " << z << endl; }
  bool operator==(Point b) const {
    return sgn(x - b.x) == 0 && sgn(y - b.y) == 0 && sgn(z - b.z) == 0;
  }
  double operator^(const Point &b) const { return x * b.y - y * b.x; }
  double operator*(const Point &b) const { return x * b.x + y * b.y + z * b.z; }
  double len() { return hypot(x, y); }
  double len2() { return x * x + y * y; }
  double distance(Point b) {
    return sqrt((x - b.x) * (x - b.x) + (y - b.y) * (y - b.y) +
                (z - b.z) * (z - b.z));
  }
  Point operator+(const Point &b) const {
    return Point(x + b.x, y + b.y, z + b.z);
  }
  Point operator-(const Point &b) const {
    return Point(x - b.x, y - b.y, z - b.z);
  }
  Point operator*(const double &k) const { return Point(x * k, y * k, z * k); }
  Point operator/(const double &k) const { return Point(x / k, y / k, z / k); }
};
int n;
Point V;
double vp, vs;
Point p[maxn];
double len[maxn];
Point ans;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n + 1; i++) p[i].input();
  for (int i = 1; i <= n; i++) len[i] = len[i - 1] + p[i].distance(p[i + 1]);
  scanf("%lf%lf", &vp, &vs);
  V.input();
  for (int i = 1; i <= n; i++) {
    double ti = len[i] / vs;
    double di = (V.distance(p[i + 1])) / vp;
    if (sgn(di - ti) <= 0) {
      printf("YES\n");
      double l = len[i - 1] / vs, r = len[i] / vs;
      Point tmp = p[i + 1] - p[i];
      while (sgn(r - l) > 0) {
        double mid = (l + r) / 2;
        double dis = mid * vs;
        Point tt = p[i] + (tmp * ((dis - len[i - 1]) / (len[i] - len[i - 1])));
        double dd = tt.distance(V);
        if (sgn(vp * mid - dd) >= 0) {
          ans = tt;
          r = mid;
        } else
          l = mid;
      }
      printf("%.15f\n", l);
      double dis = l * vs;
      ans = p[i] + (tmp * ((dis - len[i - 1]) / (len[i] - len[i - 1])));
      printf("%.15f %.15f %.15f\n", ans.x, ans.y, ans.z);
      return 0;
    }
  }
  printf("NO\n");
  return 0;
}
