水题不解释
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct node
{
int v,n;
}a[11];
bool dp[111111];
int main()
{
int cash,n;
while(cin>>cash)
{
memset(dp,0,sizeof(dp));
cin>>n;
for(int i=0;i<n;i++)cin>>a[i].n>>a[i].v;
for(int i=0;i<n;i++){
for(int j=cash;j>=0;j--){
if((j==0)||dp[j]==true){
for(int k=1;k<=a[i].n;k++){
if(j+a[i].v*k>cash)
break;
dp[j+a[i].v*k]=true;
}
}
}
}
int ans=0;
for(int i=cash;i>=0;i--){
if(dp[i]){
ans=i;
break;
}
}
cout<<ans<<endl;
}
return 0;
}