for i -> 1 to n
2 do bound -> max(dp[V - sumc[i->n]], c[i]) // 《背包九讲》中这里笔误写错了。
3 for v -> V to bound
4 do
*/
# include<stdio.h>
# include<string.h>
int dp[1000005];
int sum[105];
struct bao
{
int c;
int v;
}s[105];
int main()
{
int t, n, m;
scanf("%d", &t);
while(t --)
{
scanf("%d%d", &n, &m);
memset(dp,0,sizeof(dp));
sum[0] = 0;
for(int i = 1; i <= n; i ++)
{
scanf("%d%d", &s[i].c, &s[i].v);
sum[i] = sum[i - 1] + s[i].c;
}
for(int i = 1; i <= n; i ++)
{
int k;
k = m - sum[n] + sum[i - 1]; //求值
if(k < s[i].c) //去最大值
k = s[i].c;
for(int j = m; j >= k; j --)
{
if(dp[j - s[i].c] + s[i].v > dp[j])
{
dp[j] = dp[j - s[i].c] + s[i].v;
}
}
}
printf("Max experience: %d\n", dp[m]);
}
return 0;
}