#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
#define N 500+5
#define MAX 1000005
#define sci(a) scanf("%d", &a)
#define sci2(a,b) scanf("%d%d", &a, &b)
int Max(int a, int b){
if(a > b)
return a;
else return b;
}
int knapsack(int w,int n, int wt[], int value[])
{
vector<int>result[n+5];
for(int i = 0; i <=n; i++){
for(int j=0; j <= w; j++){
if(i==0 || j==0)
result[i].push_back(0);
else if( wt[i-1] <= j )
result[i].push_back(Max(value[i-1]+ result[i-1][(j-wt[i-1])], result[i-1][j]));
else
result[i].push_back(result[i-1][j]);
}
}
return result[n][w];
}
int main()
{
int w, n;
sci2(w,n);
int wt[n], value[n];
for(int i=0; i<n; i++)
sci2(value[i], wt[i]);
printf("%d\n", knapsack(w,n, wt, value));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0ZGlvPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBOIDUwMCs1CiNkZWZpbmUgTUFYIDEwMDAwMDUKCiNkZWZpbmUgc2NpKGEpIHNjYW5mKCIlZCIsICZhKQojZGVmaW5lIHNjaTIoYSxiKSBzY2FuZigiJWQlZCIsICZhLCAmYikKCgppbnQgTWF4KGludCBhLCBpbnQgYil7CiAgICBpZihhID4gYikKICAgICAgICByZXR1cm4gYTsKICAgIGVsc2UgcmV0dXJuIGI7Cn0KaW50IGtuYXBzYWNrKGludCB3LGludCBuLCBpbnQgd3RbXSwgaW50IHZhbHVlW10pCnsKICAgIHZlY3RvcjxpbnQ+cmVzdWx0W24rNV07CiAgICBmb3IoaW50IGkgPSAwOyBpIDw9bjsgaSsrKXsKICAgICAgICBmb3IoaW50IGo9MDsgaiA8PSB3OyBqKyspewogICAgICAgICAgICBpZihpPT0wIHx8IGo9PTApCiAgICAgICAgICAgICAgICByZXN1bHRbaV0ucHVzaF9iYWNrKDApOwogICAgICAgICAgICBlbHNlIGlmKCB3dFtpLTFdIDw9IGogKQogICAgICAgICAgICAgICAgcmVzdWx0W2ldLnB1c2hfYmFjayhNYXgodmFsdWVbaS0xXSsgcmVzdWx0W2ktMV1bKGotd3RbaS0xXSldLCByZXN1bHRbaS0xXVtqXSkpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXN1bHRbaV0ucHVzaF9iYWNrKHJlc3VsdFtpLTFdW2pdKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0W25dW3ddOwp9CmludCBtYWluKCkKewogICAgaW50IHcsIG47CiAgICBzY2kyKHcsbik7CiAgICBpbnQgd3Rbbl0sIHZhbHVlW25dOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKQogICAgICAgIHNjaTIodmFsdWVbaV0sIHd0W2ldKTsKICAgIHByaW50ZigiJWRcbiIsIGtuYXBzYWNrKHcsbiwgd3QsIHZhbHVlKSk7CgogICAgcmV0dXJuIDA7Cn0KCgo=