#include <bits/stdc++.h>
using namespace std;
int const N = 1e4 + 10;
struct Point {
  double x, y, z;
  Point() {}
  Point(double x1, double y1, double z1) : x(x1), y(y1), z(z1) {}
  bool operator==(const Point& point) const {
    return x == point.x && y == point.y && z == point.z;
  }
  Point operator-(const Point& point) const {
    return Point(x - point.x, y - point.y, z - point.z);
  }
  Point operator+(const Point& point) const {
    return Point(x + point.x, y + point.y, z + point.z);
  }
  Point operator*(const double& b) const { return Point(x * b, y * b, z * b); }
  double d(const Point& point) const {
    return sqrt(pow(x - point.x, 2) + pow(y - point.y, 2) +
                pow(z - point.z, 2));
  }
} points[N];
Point p;
int n;
double vp, vs, t[N];
int main() {
  cin >> n;
  for (int i = 0; i < n + 1; i++) {
    cin >> points[i].x >> points[i].y >> points[i].z;
  }
  cin >> vp >> vs;
  cin >> p.x >> p.y >> p.z;
  if (p == points[0]) {
    cout << "YES\n";
    cout << "0.0000000000"
         << "\n";
    cout << fixed << setprecision(10) << p.x << " " << p.y << " " << p.z
         << endl;
    return 0;
  }
  for (int i = 1; i <= n; i++)
    t[i] = points[i].d(points[i - 1]) / vs + t[i - 1];
  for (int i = 1; i <= n; i++) {
    if (p.d(points[i]) / vp - 1e-9 < t[i]) {
      double l = 0, r = 1, mid;
      Point res;
      for (int j = 0; j < 100; j++) {
        mid = (l + r) / 2;
        Point cur = points[i - 1] + (points[i] - points[i - 1]) * mid;
        if (p.d(cur) / vp - 1e-15 < points[i - 1].d(cur) / vs + t[i - 1]) {
          r = mid;
          res = cur;
        } else
          l = mid;
      }
      cout << "YES\n";
      cout << fixed << setprecision(10) << p.d(res) / vp << endl;
      cout << fixed << setprecision(10) << res.x << " " << res.y << " " << res.z
           << endl;
      return 0;
    }
  }
  cout << "NO\n";
  return 0;
}
