1 #include <iostream>
2 #include <cstdlib>
3 #include <cstdio>
4 #include <cstring>
5 #include <queue>
6 #include <algorithm>
7 #include <cmath>
8 #include <map>
9 #include <set>
10 #define N 205
11 using namespace std;
12 long long n,m,f,zz,ans;
13 struct no
14 {
15 long long p,s;
16 }node2[N],node[N];
17 bool px(no a,no b)
18 {
19 if(a.s==b.s)return a.p<b.p;
20 return a.s>b.s;
21 }
22 bool px2(no a,no b)
23 {
24 return a.p<b.p;
25 }
26 long long check(long long x)
27 {
28 long long money=m-f*x,T=0,sum=0,js;
29 if(money<0)return 0;
30 for(int i=1;i<=n;i++)
31 {
32 if(T<node[i].s)
33 {
34 js=min(node[i].s-T,money/(x*node[i].p));
35 sum+=x*js;
36 T+=js;
37 money-=node[i].p*js*x;
38 }
39 if(T<node[i].s)
40 {
41 js=money/node[i].p;
42 sum+=js;
43 T++;
44 money-=node[i].p*js;
45 }
46 }
47 return sum;
48 }
49 int main()
50 {
51 scanf("%lld%lld%lld",&m,&f,&n);
52 for(int i=1;i<=n;i++)
53 {
54 scanf("%lld%lld",&node2[i].p,&node2[i].s);
55 node2[i].s++;
56 }
57 sort(node2+1,node2+1+n,px);
58 node[1]=node2[1];zz=1;
59
60 for(int i=2;i<=n;i++)
61 {
62 if(node2[i].p>=node2[i-1].p)continue;
63 zz++;
64 node[zz]=node2[i];
65 }
66 n=zz;
67 sort(node+1,node+1+n,px2);
68 long long li=1,ri=m/(f+node[1].p),lm,rm;
69 while(li<=ri)
70 {
71 lm=li+(ri-li+1)/3,rm=ri-(ri-li+1)/3;
72 long long ans1=check(lm),ans2=check(rm);
73 if(ans1>=ans2)
74 {
75 ans=max(ans,ans1);
76 ri=rm-1;
77 }
78 else
79 {
80 ans=max(ans,ans2);
81 li=lm+1;
82 }
83 }
84 printf("%lld\n",ans);
85 return 0;
86 }