#include <bits/stdc++.h>
using namespace std;
const signed int MAX = 1e4 + 5;
pair<signed int, signed int> polygon[MAX];
bool cross(pair<signed int, signed int> v1, pair<signed int, signed int> v2) {
  return 1LL * v1.first * v2.second - 1LL * v1.second * v2.first < 0;
}
bool comp(pair<signed int, signed int> v1, pair<signed int, signed int> v2,
          pair<signed int, signed int> v3) {
  return cross(v1, v2) == cross(v2, v3);
}
signed int main() {
  signed int n, w, v, u;
  scanf("%d %d %d %d", &n, &w, &v, &u);
  for (signed int i = 0; i < (n); ++i)
    scanf("%d %d", &polygon[i].first, &polygon[i].second);
  pair<signed int, signed int> s3 = pair<signed int, signed int>(u, v);
  signed int side1 = 0;
  signed int side2 = 0;
  for (signed int i = 0; i < (n); ++i) {
    signed long long tmp =
        1LL * polygon[i].first * u - 1LL * polygon[i].second * v;
    if (tmp < 0)
      side1++;
    else if (tmp > 0)
      side2++;
  }
  if (side1 == 0 || side2 == 0) {
    printf("%.9f", 1.0 * w / u);
    return 0;
  }
  double t = 1e9;
  pair<signed int, signed int> v2 = pair<signed int, signed int>(v, u);
  for (signed int i = 0; i < (n); ++i) {
    signed int next = (i + 1 == n) ? 0 : i + 1;
    signed int nextnext = (i + 2 >= n) ? i + 2 - n : i + 2;
    pair<signed int, signed int> v1 =
        pair<signed int, signed int>(polygon[next].first - polygon[i].first,
                                     polygon[next].second - polygon[i].second);
    pair<signed int, signed int> v3 = pair<signed int, signed int>(
        polygon[nextnext].first - polygon[next].first,
        polygon[nextnext].second - polygon[next].second);
    if (comp(v1, v2, v3)) {
      double tmp =
          (1.0 * polygon[next].first * u - 1.0 * polygon[next].second * v) /
          (1.0 * v * u);
      if (tmp >= 0) {
        t = min(t, tmp);
      }
    }
  }
  t += 1.0 * w / u;
  printf("%.9f\n", t);
  return 0;
}
