#include "iostream"
#include "stdio.h"
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <string.h>
#include <stack>
#include <ctype.h>
#include <functional>
#include <math.h>
using namespace std;
//1152 一维数组
int dp[1010];
int p[101],g[101];
int c,n;
int main(){
//freopen("input.txt","r",stdin);
while(cin>>c>>n){
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
cin>>p[i]>>g[i];
for(int i=1;i<=n;i++)
for(int j=c;j>=p[i];j--)
dp[j]=max(dp[j],dp[j-p[i]]+g[i]);
cout<<dp[c]<<endl;
}
return 0;
}
/**************************************************************
Problem: 1152
User: cust123
Language: C++
Result: Accepted
Time:10 ms
Memory:1524 kb
****************************************************************/
#include "iostream"
#include "stdio.h"
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <string.h>
#include <stack>
#include <ctype.h>
#include <functional>
#include <math.h>
using namespace std;
//1152
int dp[101][1010];
struct E{
int p,g;
}E[101];
int c,n;
int main(){
//freopen("input.txt","r",stdin);
while(cin>>c>>n){
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
cin>>E[i].p>>E[i].g;
for(int i=1;i<=n;i++){
for(int j=c;j>=E[i].p;j--)
dp[i][j]=max(dp[i-1][j],dp[i-1][j-E[i].p]+E[i].g);\
for(int j=E[i].p-1;j>=0;j--)
dp[i][j]=dp[i-1][j];
}
cout<<dp[n][c]<<endl;
}
return 0;
}
/**************************************************************
Problem: 1152
User: cust123
Language: C++
Result: Accepted
Time:10 ms
Memory:1920 kb
****************************************************************/