</pre><pre name="code" class="cpp">#include<stdio.h>
#include<string.h>
int f[100001];
int m[11],v[11];
int max(int x,int y)
{
if(x<y)return y;
else return x;
}
int main()
{
freopen("t.txt","r",stdin);
int cash,n,i,k,j;
while(~scanf("%d%d",&cash,&n))
{
for(i=1;i<=n;i++)
scanf("%d%d",&m[i],&v[i]);
if(!cash||!n){printf("0\n");continue;}
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
if(m[i]*v[i]>=cash)
for(j=v[i];j<=cash;j++)
f[j]=max(f[j],f[j-v[i]]+v[i]);
else
{
int k=1;
while(k<m[i])
{
for(j=cash;j>=k*v[i];j--)
f[j]=max(f[j],f[j-k*v[i]]+k*v[i]);
m[i]=m[i]-k;
k=2*k;
}
for(j=cash;j>=m[i]*v[i];j--)
f[j]=max(f[j],f[j-m[i]*v[i]]+m[i]*v[i]);
}
printf("%d\n",f[cash]);
}
return 0;
}