#include<stdio.h>
#include<string.h>
int main()
{
int n,i,j,w[10],p[10],m,f[100];
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1; i<=m; i++)
scanf("%d%d",&w[i],&p[i]);
memset(f,0,sizeof(f));
for(i=1; i<=m; i++)
for(j=10; j>=w[i]; j--)
if(f[j-w[i]]+p[i]>f[j])
f[j]=f[j-w[i]]+p[i];//不放和在j-w[i](因为要给其他的留有尽可能多的空间所以i物体
printf("%d\n",f[n]);//的空间为w[i],其他物体的空间为j-w[i],f[j-w[i]]存放的是在j-w[i]空间下的最大值)
}//空间下且i物体还没有放过进行比较
return 0;
}/*完全背包是在不放和在j-w[i]的空间下(已确定放或是不放i物体的情况下的最大值)
放i物体的价值进行的比较*/
//完全背包代码
for(i=1;i<=m;i++)
for(j=w[i];j<=m;j++)
if(f[j-w[i]]+p[i]>f[j])
f[j]=f[j-w[i]]+p[i];
/*最大的区别就在去01背包是在j-w[i]没有放过i物体的情况下比较放或者是不放
而完全背包就是在j-w[i]的空间下已确定i物体时放进去好还是不好*/
#include<string.h>
int main()
{
int n,i,j,w[10],p[10],m,f[100];
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1; i<=m; i++)
scanf("%d%d",&w[i],&p[i]);
memset(f,0,sizeof(f));
for(i=1; i<=m; i++)
for(j=10; j>=w[i]; j--)
if(f[j-w[i]]+p[i]>f[j])
f[j]=f[j-w[i]]+p[i];//不放和在j-w[i](因为要给其他的留有尽可能多的空间所以i物体
printf("%d\n",f[n]);//的空间为w[i],其他物体的空间为j-w[i],f[j-w[i]]存放的是在j-w[i]空间下的最大值)
}//空间下且i物体还没有放过进行比较
return 0;
}/*完全背包是在不放和在j-w[i]的空间下(已确定放或是不放i物体的情况下的最大值)
放i物体的价值进行的比较*/
//完全背包代码
for(i=1;i<=m;i++)
for(j=w[i];j<=m;j++)
if(f[j-w[i]]+p[i]>f[j])
f[j]=f[j-w[i]]+p[i];
/*最大的区别就在去01背包是在j-w[i]没有放过i物体的情况下比较放或者是不放
而完全背包就是在j-w[i]的空间下已确定i物体时放进去好还是不好*/