#include <bits/stdc++.h>
using namespace std;
set<pair<int, double> > arrivePoints, leavePoints;
int n, width, busSpeed, walkSpeed;
void addEdge(pair<int, int> newPoint, pair<int, int> lastPoint) {
  if (newPoint.second > lastPoint.second) {
    leavePoints.insert(pair<int, double>(
        lastPoint.second, ((double)lastPoint.first) / ((double)busSpeed)));
    leavePoints.insert(pair<int, double>(
        newPoint.second, ((double)newPoint.first) / ((double)busSpeed)));
  } else if (newPoint.second < lastPoint.second) {
    arrivePoints.insert(pair<int, double>(
        lastPoint.second, ((double)lastPoint.first) / ((double)busSpeed)));
    arrivePoints.insert(pair<int, double>(
        newPoint.second, ((double)newPoint.first) / ((double)busSpeed)));
  } else if (newPoint.first > lastPoint.first) {
    leavePoints.insert(pair<int, double>(
        lastPoint.second, ((double)lastPoint.first) / ((double)busSpeed)));
    arrivePoints.insert(pair<int, double>(
        newPoint.second, ((double)newPoint.first) / ((double)busSpeed)));
  } else {
    arrivePoints.insert(pair<int, double>(
        lastPoint.second, ((double)lastPoint.first) / ((double)busSpeed)));
    leavePoints.insert(pair<int, double>(
        newPoint.second, ((double)newPoint.first) / ((double)busSpeed)));
  }
}
double maximum(double a, double b) { return (a > b ? a : b); }
int main() {
  scanf("%d %d %d %d", &n, &width, &busSpeed, &walkSpeed);
  pair<int, int> lastPoint, firstPoint;
  scanf("%d %d", &lastPoint.first, &lastPoint.second);
  firstPoint.first = lastPoint.first;
  firstPoint.second = lastPoint.second;
  for (int i = 0; i < n - 1; i++) {
    pair<int, int> newPoint;
    scanf("%d %d", &newPoint.first, &newPoint.second);
    addEdge(newPoint, lastPoint);
    lastPoint.first = newPoint.first;
    lastPoint.second = newPoint.second;
  }
  addEdge(firstPoint, lastPoint);
  bool goFirst = true;
  for (set<pair<int, double> >::iterator it = arrivePoints.begin();
       goFirst && it != arrivePoints.end(); ++it) {
    if (it->second < ((double)it->first) / ((double)walkSpeed)) {
      goFirst = false;
    }
  }
  if (goFirst) {
    printf("%0.14f", ((double)width) / ((double)walkSpeed));
  } else {
    double maxDelay = 0;
    for (set<pair<int, double> >::iterator it = leavePoints.begin();
         it != leavePoints.end(); ++it) {
      maxDelay = maximum(
          maxDelay, it->second - (((double)it->first) / ((double)walkSpeed)));
    }
    printf("%0.14f", maxDelay + ((double)width) / ((double)walkSpeed));
  }
  scanf("%d", &n);
}
