#include <iostream>
#include <cstdio>
#include <queue>
#define INF 1000000
using namespace std;
struct state{
int presnt;
double rem_gas;
double cost;
};
double d[55],price_gal[55];
double gr[55][55],dst[55][55];
bool visit[55];
int L;
double dist,cango;
double capacity,dist_pergal,price;
int station;
double MN;
int recurs(state a)
{
int pos = a.presnt;
double gaso = a.rem_gas;
double cst = a.cost;
state t;
if(pos==L)
{
if(MN>cst)
MN = cst;
return 0;
}
if(gaso>=capacity/2)
{
bool flag = true;
for(int i=pos+1;i<=L;i++)
{
if(visit[i])
continue;
double distance = dst[i][pos];
if((dist_pergal*gaso)>=distance)
{
t.presnt = i;
t.cost = cst;
t.rem_gas= gaso - distance/dist_pergal;
visit[i]=1;
recurs(t);
visit[i]=0;
flag=0;
}
}
if(flag)
{
a.presnt = pos;
a.cost = cst + (capacity-gaso)*price_gal[pos]+2;
a.rem_gas = capacity;
recurs(a);
visit[pos]=0;
}
}
else
{
for(int i=pos+1;i<=L;i++)
{
if(visit[i])
continue;
double distance = dst[i][pos];
if((dist_pergal*gaso)>=distance)
{
t.presnt = i;
t.cost = cst;
t.rem_gas= gaso - distance/dist_pergal;
visit[i]=1;
recurs(t);
visit[i]=0;
}
}
a.presnt = pos;
a.cost = cst + (capacity-gaso)*price_gal[pos]+2;
a.rem_gas = capacity;
recurs(a);
visit[pos]=0;
}
return 0;
}
int main()
{
int kase=1;
while(cin>>dist)
{
if(dist<0)
break;
cin>>capacity>>dist_pergal>>price;
cango = capacity/dist_pergal;
cin>>station;
L=1;
for(int i=0;i<55;i++)
{
visit[i]=false;
for(int j=0;j<55;j++)
{
if(i==j)
dst[i][j]=0;
else
dst[i][j]=INF;
}
}
d[0]=0;
price_gal[0]=price/capacity;
while(station--)
{
cin>>d[L]>>price_gal[L];
price_gal[L]/=100;
for(int i=0;i<L;i++)
{
dst[L][i]=d[L]-d[i];
}
L++;
}
if(d[L-1]<dist)
{
d[L] = dist;
for(int i=0;i<L;i++)
{
dst[L][i]=d[L]-d[i];
}
}
MN = INF;
state s;
s.presnt = 0;
s.rem_gas = capacity;
s.cost = price;
visit[0]=1;
recurs(s);
visit[0]=0;
cout<<"Data Set #"<<kase++<<"\n";
printf("minimum cost = $%.2lf\n",MN);
}
return 0;
}