#include<bits/stdc++.h> usingnamespacestd; constint N = 410; int c[N], v[N], ans; int dp[40010]; intmain(){ int N, M; scanf("%d%d", &N, &M); for (int i = 1; i <= N; i++) { scanf("%d%d", &c[i], &v[i]); if (c[i] <= 0) { ans += v[i]; M -= c[i]; c[i] = -c[i]; v[i] = -v[i]; } } for (int i = 1; i <= N; i++) for (int j = M; j >= c[i]; j--) dp[j] = max(dp[j], dp[j - c[i]] + v[i]);
for (int i = 0; i <= M; i++) { dp[M] = max(dp[M], dp[i]); } printf("%d\n", ans + dp[M]); return0; }