#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
const int N = 10005;
const int M = 16;
const int inf = 1000000007;
const int mod = 110119;
const int maxn = 10050;
struct point {
  double x, y;
} p[N];
double n, w, v, u;
int judge_sign(double x) {
  if (x > 1e-9) return 1;
  if (x < -1e-9) return -1;
  return 0;
}
bool judge_before() {
  for (int i = 0; i < n; i++)
    if (judge_sign(u * p[i].x - v * p[i].y) < 0) return false;
  return true;
}
bool judge_after(double t) {
  for (int i = 0; i < n; i++)
    if (judge_sign(u * p[i].x - v * p[i].y - u * v * t) > 0) return false;
  return true;
}
int main() {
  int i;
  scanf("%lf%lf%lf%lf", &n, &w, &v, &u);
  for (i = 0; i < n; i++) scanf("%lf%lf", &p[i].x, &p[i].y);
  if (judge_before()) {
    printf("%.10f\n", w / u);
    return 0;
  }
  double l = 0, r = 1e9, mid;
  for (i = 0; i < 100; i++) {
    mid = (l + r) / 2;
    if (judge_after(mid))
      r = mid;
    else
      l = mid;
  }
  printf("%.10f\n", w / u + (l + r) / 2);
  return 0;
}
