#include <bits/stdc++.h>
using namespace std;
typedef struct {
  double x, y;
} dian;
int main(void) {
  dian point[10100];
  int n;
  double w, v, u;
  cin >> n >> w >> v >> u;
  int up, down, left, right;
  up = down = left = right = -1;
  double uup, ddo, lle, rri;
  rri = uup = -1000000009;
  lle = ddo = 1000000009;
  for (int i = 0; i < n; i++) {
    scanf("%lf %lf", &point[i].x, &point[i].y);
    if (point[i].x > rri) {
      rri = point[i].x;
      right = i;
    }
    if (point[i].x == rri) {
      if (point[i].y > point[right].y) right = i;
    }
    if (point[i].x < lle) {
      lle = point[i].x;
      left = i;
    }
    if (point[i].x == lle) {
      if (point[i].y < point[left].y) left = i;
    }
    if (point[i].y > uup) {
      uup = point[i].y;
      up = i;
    }
    if (point[i].y == uup) {
      if (point[up].x > point[i].x) up = i;
    }
    if (point[i].y < ddo) {
      ddo = point[i].y;
      down = i;
    }
    if (point[i].y == ddo) {
      if (point[i].x > point[down].x) down = i;
    }
  }
  double peostart = ddo / u;
  double bustart = lle / v;
  double peoend = uup / u;
  double busend = rri / v;
  if (peostart > busend || peoend < bustart) {
    printf("%.7f\n", w / u);
    return 0;
  }
  int k = left;
  int key = 1;
  while (k != (up + n - 1) % n) {
    peostart = point[k].y / u;
    bustart = point[k].x / v;
    if (bustart < peostart) {
      key = 0;
      break;
    }
    k += n - 1;
    k %= n;
  }
  if (key) {
    printf("%.7f\n", w / u);
    return 0;
  }
  double ans = 0;
  ans = point[down].x / v;
  k = down;
  while (k != right) {
    int temp = (k + 1) % n;
    ans +=
        max((point[temp].y - point[k].y) / u, (point[temp].x - point[k].x) / v);
    k = temp;
  }
  ans += (w - point[right].y) / u;
  printf("%.7f\n", ans);
  return 0;
}
