/* Author haleyk10198 */
/* 作者:  haleyk10198 */
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <map>
#include <queue>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <iomanip>
#include <ctime>
#include <string>
#include <set>
#include <stack>

#define MOD 1000000007
#define INF 2147483647
#define PI 3.1415926535897932384626433
#define ll long long
#define pii pair<int,int>
#define mp(x,y) make_pair((x),(y))

using namespace std;

struct edge{
	double a,b,c,m;
	pii u,v;
	edge(pii e,pii f):u(e),v(f){
		if(e.first==f.first){
			a=1;b=0;c=e.second;
			m=-2e9;
		}
		else{
			m=1.0*(e.second-f.second)/(e.first-f.first);
			b=-1;a=m;c=e.second-m*e.first;
		}
	}
};

int n,w,v,u;
vector<edge> a;
vector<pii> list;

bool check(void){
	double mid=1.0*w/u;
	edge now=edge(mp(0,0),mp(mid*v,w));
	bool f=true;
	for(auto x:a){/*
		double x1,y1;
		if(x.a==now.a||x.b==0)
			continue;
		if(x.m==2e9){
			x1=x.u.first;
			y1=(x1*now.a+now.c)/(-now.b);
		}
		else{
			x1=1.0*(x.c-now.c)/(now.a-x.a);
			y1=-1.0*(x.a*x1+x.c)/x.b;
		}
		if((x1<x.u.first)^(x1<x.v.first)&&(y1<x.u.second)^(y1<x.v.second))
			f=false;
		*/
		double x1=x.u.first,y1=x.u.second;
		if(x1/v<y1/u)
			f=false;
	}
	return f;
}

/*
double bins(double l,double r,int cnt){
	double mid=(l+r)/2;
	if(cnt==100)
		return mid;
	if(!check(mid))
		return bins(mid,r,cnt+1);
	else
		return bins(l,mid,cnt+1);
}
*/

int main(){
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	//ios_base::sync_with_stdio(false);
	cin>>n>>w>>v>>u;
	int low,lowv=INF;
	for(int i=0;i<n;i++){
		int x,y;
		cin>>x>>y;
		list.push_back(mp(x,y));
	}
	for(int i=0;i<n;i++){
		a.push_back(edge(list[i],list[(i+1)%n]));
		if(lowv>a[i].u.second){
			low=i;
			lowv=a[i].u.second;
		}
	}
	if(check()||lowv>w)
		cout<<fixed<<setprecision(12)<<1.0*w/u;
	else{
		int nowy=0,i=low;
		double t=0.0;
		t=max(1.0*a[i].u.second/u,1.0*a[i].u.first/v);
		nowy=a[i].u.second;
		for(;a[i].m>0;(++i)%=n){
			t=max(1.0*(a[i].v.second-nowy)/u+t,1.0*a[i].v.first/v);
			nowy=a[i].v.second;
		}
		t+=1.0*(w-nowy)/u;
		cout<<fixed<<setprecision(12)<<t<<endl;
	}
	return 0;
}
