#include <iostream>//思路错了,借鉴了大佬的思路 贪心排序油费
#include <algorithm>
#include <cmath>
#include <cstring>
#include <limits>
#include <stack>
#define maxn 510
using namespace std;
typedef struct stack{
double P;//开double精度才够
double D;
double maxD;
}Sta;
bool dis[30010];//标记走过的路
bool cmp(Sta s1,Sta s2)
{
return s1.P<s2.P;
}
int main() {
int Cmax,D,Davg,N;
while(cin>>Cmax>>D>>Davg>>N)
{
Sta sta[maxn];
for(int i=0;i<N;i++)
{
cin>>sta[i].P>>sta[i].D;
sta[i].maxD = sta[i].D + (Cmax*Davg*1.0);//计算最远可以走到哪里
}
sort(sta,sta+N,cmp);//排序
memset(dis,0,sizeof(dis));
// for(int i=0;i<N;i++)cout<<"pri: "<<sta[i].P<<" D : "<<sta[i].D<<" max = "<<sta[i].maxD<<endl;
double ans=0;
for(int i = 0;i<N;i++)
{
int l,r,cnt=0;
l = sta[i].D;
r = sta[i].maxD;
if(sta[i].D==0)dis[0]=1;
for(int j=l+1;j<=r&&j<=D;j++)
{
if(!dis[j]){
dis[j]=1;
cnt++;//计算走的路程
}
}
// cout<<sta[i].P<<" "<<l<<" "<<r<<" cnt ="<<cnt<<endl;
// cout<<"cnt = "<<cnt<<endl;
ans = ans + (cnt *1.0/Davg)* sta[i].P*1.0;//邮费
}
int flag = 0;
double diss;
for(int i=0;i<=D;i++)
{
if(dis[i]==0){
flag = 1;
diss = i;
break;
}
}
// cout<<1<<" "<<dis[1]<<endl;
if(flag)printf("The maximum travel distance = %.2lf\n",diss-1);
else printf("%.2lf\n",ans);
}
}
// 64 位输出请用 printf("%lld")