#include <bits/stdc++.h>
using namespace std;
const long double inf = 1e100;
const long double pi = acos(-1);
struct pt {
  long double x, y;
  pt() { x = y = 0; }
  pt(long double x, long double y) {
    this->x = x;
    this->y = y;
  }
  pt(const pt &p) {
    x = p.x;
    y = p.y;
  }
  pt operator+(const pt &p) const { return pt(x + p.x, y + p.y); }
  pt operator-(const pt &p) const { return pt(x - p.x, y - p.y); }
  pt operator*(long double c) const { return pt(x * c, y * c); }
  bool operator<(const pt &p) const {
    return (x < p.x) || (fabsl(x - p.x) < 1e-12 && y < p.y);
  }
  bool operator==(const pt &p) const {
    return (fabsl(x - p.x) < 1e-12) && (fabsl(y - p.y) < 1e-12);
  }
};
ostream &operator<<(ostream &os, pt &p) {
  return os << '(' << p.x << ',' << p.y << ')';
}
long double dot(pt a, pt b) { return a.x * b.x + a.y * b.y; }
long double cross(pt a, pt b) { return a.x * b.y - a.y * b.x; }
long double dist2(pt a, pt b) { return dot(a - b, a - b); }
bool LinesParallel(pt a, pt b, pt c, pt d) {
  return fabs(cross(b - a, c - d)) < 1e-12;
}
bool LinesCollinear(pt a, pt b, pt c, pt d) {
  return LinesParallel(a, b, c, d) && fabsl(cross(a - b, a - c)) < 1e-12 &&
         fabs(cross(c - d, c - a)) < 1e-12;
}
bool SegmentsIntersect(pt a, pt b, pt c, pt d) {
  if (LinesCollinear(a, b, c, d)) return 0;
  if (cross(d - a, b - a) * cross(c - a, b - a) > 0) return 0;
  if (cross(a - c, d - c) * cross(b - c, d - c) > 0) return 0;
  return 1;
}
bool common_point(pt a, pt b, pt c, pt d) {
  return a == c || a == d || b == c || b == d;
}
bool intersect(vector<pt> &p, pt p1, pt p2) {
  for (int i = 0; i < p.size() - 1; i++) {
    if (common_point(p[i], p[i + 1], p1, p2)) continue;
    if (SegmentsIntersect(p[i], p[i + 1], p1, p2)) return 1;
  }
  if (common_point(p[0], p.back(), p1, p2)) return 0;
  return SegmentsIntersect(p[0], p.back(), p1, p2);
}
int main() {
  int n;
  long double w, u, v;
  cin >> n >> w >> v >> u;
  pt point1(0, 0);
  long double x, y;
  y = w;
  x = (w / u) * v;
  pt point2(x, y);
  vector<pt> vec(n);
  for (auto &x : vec) cin >> x.x >> x.y;
  if (!intersect(vec, point1, point2)) {
    cout << fixed << setprecision(8) << w / u;
    return 0;
  }
  long double st = 0, en = 1e10, ans = -1;
  for (int i = 0; i < 100; i++) {
    long double mid = (st + en) / 2;
    long double dist = mid * v;
    point1.x += dist, point2.x += dist;
    if (!intersect(vec, point1, point2))
      ans = mid + (w / u), en = mid;
    else
      st = mid;
    point1.x -= dist, point2.x -= dist;
  }
  cout << fixed << setprecision(8) << ans;
}
