//经典0-1背包,采用动态规划的做法
#include "stdio.h"
#include "algorithm"
using namespace std;
int main(){
int C,N;
int price[110];
int credit[110];
int dp[110][1010];
while (scanf("%d%d",&C,&N)!=EOF){
for (int i = 1; i <= N; ++i) {
scanf("%d%d",price+i,credit+i);
}
for (int i = 0; i <= N; ++i) {//i为菜品的下标
for (int j = 0; j <= C; ++j) {//j为weight(剩下的钱)
if (i == 0 || j == 0){//没有菜品可选或没钱了
dp[i][j] = 0;
continue;
}
if (j < price[i])
dp[i][j] = dp[i-1][j];//菜太贵,超过了weight,没法买
else
dp[i][j] = max(dp[i-1][j-price[i]]+credit[i],dp[i-1][j]);//买此菜品与不买此
//菜品中选择评分高的
}
}
printf("%d\n",dp[N][C]);
}
}