```cpp=
#include <stdio.h>
#define max(a, b) ((a) > (b) ? (a) : (b))
int main() {
long long n, capacity;
scanf("%lld %lld", &n, &capacity);
long long value[n], profit[n];
for (long long i = 0; i < n; i++) {
scanf("%lld %lld", &value[i], &profit[i]);
}
long long dp[capacity + 1];
for (long long i = 0; i <= capacity; i++) {
dp[i] = 0;
}
for (long long i = 0; i < n; i++) {
for (long long j = capacity; j >= value[i]; j--) {
dp[j] = max(dp[j], dp[j - value[i]] + profit[i]);
}
}
printf("%lld\n", dp[capacity]);
return 0;
}
```