#include <bits/stdc++.h>
using namespace std;
const int NR=505;
const int MR=10;
double L,C,l1,P;
int N;
struct gap{
double d;
double p;
}sta[10];
double pay=0,now=0;
int stay=0;
bool check=0;
bool cmp(gap x,gap y){
return x.d<y.d;
}
int main(){
cin>>L>>C>>l1>>P>>N;
sta[0].d=0;
sta[0].p=P;
sta[N+1].d=L;
sta[N+1].p=-999999;
for(int i=1;i<=N;i++){
cin>>sta[i].d>>sta[i].p;
if(C*l1<sta[i].d-sta[i-1].d){
cout<<"No Solution";
return 0;
}
}
if(C*l1<sta[N+1].d-sta[N].d){
cout<<"No Solution";
return 0;
}
sort(sta+1,sta+N+2,cmp);
for(int i=0;i<=N;i++){
if(i<stay) continue;
double need=(sta[i+1].d-sta[i].d)/l1;
if(sta[i].p>=sta[i+1].p){
if(now<need){
pay+=(need-now)*sta[i].p;
now=0;
stay++;
}
else{
now-=need;
stay++;
}
}
else{
for(int j=i;j<=N;j++){
if(sta[j+1].p<=sta[i].p&&sta[j+1].d-sta[i].d<=C*l1){
pay+=(sta[j+1].d-sta[i].d)/l1*sta[i].p;
now=0;
stay=j+1;
check=1;
break;
}
}
if(check){
check=0;
continue;
}
pay+=(C-now)*sta[i].p;
now=C;
now-=need;
stay++;
}
}
printf("%.2lf",pay);
return 0;
}