#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
double d1,c,d2,p;
int n;
double u,res;
struct node{
double x,y;
}a[N];
struct nobe{
double x1,y1,number;
}b[N];
bool cmp(nobe a,nobe b){
return a.y1<b.y1;
}
bool cmp1(node a,node b){
return a.x<b.x;
}
double ans,sum;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>d1>>c>>d2>>p>>n;
a[0].x=0;a[0].y=p;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].y;
b[i].x1=a[i].x,b[i].y1=a[i].y;
b[i].number=i;
}
bool flag=false;
for(int i=0;i<n;i++){
if(a[i+1].x-a[i].x>c*d2){
flag=true;
}
}
if(d1-a[n].x>c*d2){
flag=true;
}
if(flag==true){
cout<<"No Solution";
return 0;
}
sort(a+1,a+n+1,cmp1);
sort(b+1,b+n+1,cmp);
bool flag1=false;
for(int i=0;i<=n;i++){
bool flag1=false;
double q=c*d2;
double ii=n;
for(int j=i+1;j<=n;j++){
if(a[j].x-a[i].x<=q&&a[j+1].x-a[i].x>q)ii=j;
}
for(int j=i+1;j<=ii;j++){
if(a[j].y<a[i].y){
ans+=a[i].y*((a[j].x-a[i].x)/d2);
i=j;
flag1=true;
break;
}
}
if(i==n&&flag1==true){
ans+=((d1-a[i].x)/d2)*a[i].y;
printf("%.2lf",ans);
return 0;
}
if(flag1==false){
if(d1-a[i].x<=c*d2){
ans+=((d1-a[i].x)/d2)*a[i].y;
printf("%.2lf",ans);
return 0;
}else{
double o=0,o2=0;
double q=c*d2;
double ii=n;
for(int j=i+1;j<=n;j++){
if(a[j].x-a[i].x<=q&&a[j+1].x-a[i].x>q)ii=j;
}
u=(c-res)*d2;
ans+=(c-res)*a[i].y;
for(int j=i+1;j<=ii;j++){
if(b[j].number>i){
ans+=((b[j].x1-a[i].x)/d2-res)*a[i].y;
res=u-(b[j].x1-a[i].x);
}
}
}
}
}
printf("%.2lf",ans);
return 0;
}