#include<stdio.h>
#include<string.h>
int f[110][1010],w[110],v[110];
int max(int x,int y){
return x>y?x:y;
}
int dfs(int x,int y){
if(x<1)return 0;
if(f[x][y]<0){
if(y<w[x])return f[x][y]=dfs(x-1,y);
else return f[x][y]=max(dfs(x-1,y),dfs(x-1,y-w[x])+v[x]);
}
}
int main(){
int i,m,n;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
scanf("%d%d",&w[i],&v[i]);
memset(f,-1,sizeof(f));
printf("%d\n",dfs(m,n));
return 0;
}
#include<string.h>
int f[110][1010],w[110],v[110];
int max(int x,int y){
return x>y?x:y;
}
int dfs(int x,int y){
if(x<1)return 0;
if(f[x][y]<0){
if(y<w[x])return f[x][y]=dfs(x-1,y);
else return f[x][y]=max(dfs(x-1,y),dfs(x-1,y-w[x])+v[x]);
}
}
int main(){
int i,m,n;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
scanf("%d%d",&w[i],&v[i]);
memset(f,-1,sizeof(f));
printf("%d\n",dfs(m,n));
return 0;
}