#include <bits/stdc++.h>
using namespace std;
struct node {
  double x, y, t, t0;
} a[100005];
int vis[100005];
int main() {
  int n;
  double w, u, v;
  while (scanf("%d%lf%lf%lf", &n, &w, &v, &u) != EOF) {
    double maxx, maxy, minx, miny;
    maxx = maxy = -1000000001;
    minx = miny = 1000000001;
    int pos_low;
    for (int i = 1; i <= n; i++) {
      scanf("%lf%lf", &a[i].x, &a[i].y);
      if (a[i].x > 0) {
        a[i].t = a[i].x / v;
      } else {
        a[i].t = 0;
      }
      a[i].t0 = a[i].y / u;
      if (a[i].y < miny) {
        pos_low = i;
      }
      maxx = max(maxx, a[i].x);
      minx = min(minx, a[i].x);
      miny = min(miny, a[i].y);
      maxy = min(maxy, a[i].y);
    }
    double nowt = 0;
    double nowy = 0;
    int k = pos_low;
    double fuckt;
    for (int j = 1; j <= n; j++) {
      if (a[k].y < nowy) {
        k++;
        if (k > n) k = 1;
        continue;
      }
      fuckt = (a[k].y - nowy) / u;
      if (fuckt + nowt >= a[k].t) {
        nowt += fuckt;
        nowy = a[k].y;
      } else if (fuckt + nowt < a[k].t) {
        nowt = a[k].t;
        nowy = a[k].y;
      }
      k++;
      if (k > n) k = 1;
    }
    nowt += (w - nowy) / u;
    int flag = 0;
    for (int i = 1; i <= n; i++) {
      if (a[i].t0 > a[i].t) {
        flag = 1;
      }
    }
    if (flag == 0) {
      nowt = w / u;
    }
    printf("%.7lf\n", nowt);
  }
}
