#include<iostream>
#include<cstdio>
#include<string.h>
#include<cstring>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#define ll long long
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0xfffffff
#define mod 1000000007
using namespace std;
/*
题意:问你最多买m个的情况下,恰好在总时间为V的情况下,得到的总乐趣值是多少
想法:二维费用背包,dp[j][v] 代表在最多选j个体积为V的费用
*/
int dp[1009][1009];
int Time[MAX];//用时
int value[MAX];//费用价值
int main()
{
int t;
int n,m,V;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&V);
for(int i = 0;i<n;i++)scanf("%d%d",&Time[i],&value[i]);
for(int i = 0;i<=m;i++)
{
for(int j = 0;j<=V;j++)
{
if(i==0)
dp[i][j] = 0;
else
dp[i][j] = -MAX;
}
}
for(int i = 0;i<n;i++)
{
for(int j = m;j>=1;j--)//多出的一维用来循环最多选m个的最大价值
{
for(int k = V;k>=Time[i];k--)
{
dp[j][k] = max(dp[j][k],dp[j - 1][k - Time[i]]+value[i]);
}
}
}
if(dp[m][V]<0) dp[m][V] = 0;
printf("%d\n",dp[m][V]);
}
return 0;
}
#include<cstdio>
#include<string.h>
#include<cstring>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#define ll long long
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0xfffffff
#define mod 1000000007
using namespace std;
/*
题意:问你最多买m个的情况下,恰好在总时间为V的情况下,得到的总乐趣值是多少
想法:二维费用背包,dp[j][v] 代表在最多选j个体积为V的费用
*/
int dp[1009][1009];
int Time[MAX];//用时
int value[MAX];//费用价值
int main()
{
int t;
int n,m,V;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&V);
for(int i = 0;i<n;i++)scanf("%d%d",&Time[i],&value[i]);
for(int i = 0;i<=m;i++)
{
for(int j = 0;j<=V;j++)
{
if(i==0)
dp[i][j] = 0;
else
dp[i][j] = -MAX;
}
}
for(int i = 0;i<n;i++)
{
for(int j = m;j>=1;j--)//多出的一维用来循环最多选m个的最大价值
{
for(int k = V;k>=Time[i];k--)
{
dp[j][k] = max(dp[j][k],dp[j - 1][k - Time[i]]+value[i]);
}
}
}
if(dp[m][V]<0) dp[m][V] = 0;
printf("%d\n",dp[m][V]);
}
return 0;
}