#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void smin(T &a, U b) {
  if (a > b) a = b;
}
template <typename T, typename U>
inline void smax(T &a, U b) {
  if (a < b) a = b;
}
struct point {
  int first, second;
  point(int first = 0, int second = 0) : first(first), second(second) {}
  point operator-(point a) { return point(first - a.first, second - a.second); }
  point operator+(point a) { return point(first + a.first, second + a.second); }
  point operator*(int a) { return point(first * a, second * a); }
  point conj() { return point(-second, first); }
  long long operator^(point a) {
    return (long long)first * a.second - (long long)second * a.first;
  }
  long long operator*(point a) {
    return (long long)first * a.first + (long long)second * a.second;
  }
  double nor() { return sqrt(*this * *this); }
  bool operator<(const point &a) const {
    if (first != a.first) return first < a.first;
    return second < a.second;
  }
  bool operator>(const point &a) const {
    if (first != a.first) return first > a.first;
    return second > a.second;
  }
  bool operator==(const point &a) const {
    if (first != a.first) return 0;
    return second == a.second;
  }
  void input() { scanf("%d %d", &first, &second); }
  void print() { printf("%d %d\n", first, second); }
};
point a[10010];
double r[100010];
int main() {
  int n, w, v, u;
  cin >> n >> w >> v >> u;
  for (int i = 0; i < n; i++) a[i].input();
  for (int i = 0; i < n; i++) {
    r[i] = (double)a[i].first - ((double)v / u) * a[i].second;
  }
  sort(r, r + n);
  if (r[0] > -1e-8 || r[n - 1] < 1e-8) {
    printf("%.9lf\n", (double)w / u);
  } else {
    printf("%.9lf\n", r[n - 1] / v + (double)w / u);
  }
  return 0;
}
