#include <bits/stdc++.h>
using namespace std;
struct ty {
  int x, y;
} a[101000];
double limit[101000];
double limit2[101000];
double t[101000];
double t2[101000];
ty lef, down;
int lk, dk;
int n, w, v, u;
bool comp(ty a, ty b) { return a.y < b.y; }
bool judge1() {
  int minb = 0;
  for (int i = 1; i <= n; ++i) {
    int x = a[i].x;
    int y = a[i].y;
    if (1LL * y * v > 1LL * u * x) return 0;
  }
  return 1;
}
void getlimit() {
  a[0].y = 0;
  a[n + 1].y = w;
  limit[n + 1] = 0;
  for (int i = 1; i <= n; i++) {
    limit[i] = a[i].x * 1.0 / v;
  }
  for (int i = 1; i <= n + 1; i++) {
    t[i] = t[i - 1] + (a[i].y - a[i - 1].y) * 1.0 / u;
    if (t[i] < limit[i]) t[i] = limit[i];
  }
  printf("%.12f\n", t[n + 1]);
}
int main() {
  scanf("%d%d%d%d", &n, &w, &v, &u);
  lef.x = 0x7f7f7f7f;
  lef.y = 0x7f7f7f7f;
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &a[i].x, &a[i].y);
    if (a[i].x < lef.x)
      lef = a[i], lk = i;
    else if (a[i].x == lef.x)
      if (a[i].y > lef.y) lef = a[i], lk = i;
  }
  if (judge1()) {
    printf("%.12f\n", w * 1.0 / u);
    return 0;
  }
  sort(a + 1, a + 1 + n, comp);
  getlimit();
  return 0;
}
