#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 110
using namespace std;
int w[110],v[110],f[1010][110],a[110],b[110];
//f[j][k]表示重量为j时的第k优解
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m,i,j,k,l;
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=1;i<=n;i++)
scanf("%d",&w[i]);
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
{
for(j=m;j>=w[i];j--)
{
for(l=1;l<=k;l++)
{
a[l]=f[j-w[i]][l]+v[i];
b[l]=f[j][l];
}
//f[v]这个有序队列是由f[v]和f[v-c[i]]+w[i]这两个有序队列得到
a[k+1]=b[k+1]=-1;
int x=1,y=1,z=1;
while(z<=k&&(a[x]!=-1||b[y]!=-1))
{
if(a[x]>b[y])
{
f[j][z]=a[x];
x++;
}
else
{
f[j][z]=b[y];
y++;
}
if(f[j][z]!=f[j][z-1])//去重
z++;
}
}
}
printf("%d\n",f[m][k]);
}
return 0;
}