/* Coached by Dukkha */
#include <stdio.h>
#define N 100
int max(int a, int b) { return a > b ? a : b; }
int main() {
static int ww[N], vv[N], dp[N + 1][N + 1][N * 3 + 1];
int n, w_, w0, i, k, a, b, ans;
scanf("%d%d", &n, &w_);
for (i = 0; i < n; i++)
scanf("%d%d", &ww[i], &vv[i]);
w0 = ww[0];
for (i = 0; i < n; i++)
ww[i] -= w0;
for (i = 0; i < n; i++) {
int w = ww[i], v = vv[i];
for (k = 0; k <= i; k++)
for (a = 0; a <= n * 3; a++) {
dp[i + 1][k][a] = max(dp[i + 1][k][a], dp[i][k][a]);
if ((b = a + w) <= n * 3)
dp[i + 1][k + 1][b] = max(dp[i + 1][k + 1][b], dp[i][k][a] + v);
}
}
ans = 0;
for (k = 1; k <= n; k++)
if (w_ >= (long long) w0 * k)
for (a = 0; a <= w_ - w0 * k && a <= n * 3; a++)
ans = max(ans, dp[n][k][a]);
printf("%d\n", ans);
return 0;
}
./Main.c: In function ‘main’:
./Main.c:12:2: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &n, &w_);
^
./Main.c:14:3: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &ww[i], &vv[i]);
^