inline LL read(){ registerchar c; while (c = getchar(), c < '0' || c >'9'); register LL x(c - '0'); while (c = getchar(), c >= '0' && c <= '9') { x = x * 10 + c - '0'; } return x; }
inline LL max(LL a, LL b){ return a > b ? a : b; }
intmain(){ W = read(); n = read(); LL w, v; for (LL i = 0; i < n; i++) { w = read(); v = read(); for (LL i = W; i >= w; i--) { d[i] = max(d[i], d[i - w] + v); } } printf("%lld", d[W]); }