#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2020;
const ll INF=0x7FFFFFFFFFFFFFFFLL;
int T,n,k,l,cnt;
bool vis1[MAXN],vis2[MAXN];
ll a[MAXN],b[MAXN],ans,f[55][55][55][55];
struct node{int x;};
struct node2{int x;};
bool operator <(node A,node B){
return (a[A.x]<a[B.x])||(a[A.x]==a[B.x]&&b[A.x]<b[B.x]);
}
bool operator <(node2 A,node2 B){
return (b[A.x]<b[B.x])||(b[A.x]==b[B.x]&&a[A.x]<a[B.x]);
}
priority_queue<node> A;
priority_queue<node2> B;
int main(){
freopen("sequence.in","r",stdin);freopen("sequence.out","w",stdout);
scanf("%d",&T);
while (T--){
scanf("%d%d%d",&n,&k,&l);ans=cnt=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=k;j++)
for (int p=1;p<=k;p++)
for (int pp=1;pp<=l;pp++) f[i][j][p][pp]=0;
while (!A.empty()) A.pop();
while (!B.empty()) B.pop();
for (int i=1;i<=n;i++) vis1[i]=vis2[i]=0;
for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
for (int i=1;i<=n;i++) scanf("%lld",&b[i]),B.push((node2){i});
for (int i=1;i<=n;i++) A.push((node){i});
for (int i=1;i<=k;i++){
node x=A.top();A.pop();ans+=a[x.x];vis1[x.x]=1;
node2 y=B.top();B.pop();ans+=b[y.x];vis2[y.x]=1;
}
for (int i=1;i<=n;i++){
if (vis1[i]&&vis2[i]) ++cnt;
if (cnt>=l) break;
}
if (cnt>=l){cout<<ans<<'\n';continue;}
ans=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=min(i,k);j++)
for (int p=1;p<=min(i,k);p++)
for (int pp=1;pp<=min(l,min(j,p));pp++) f[i][j][p][pp]=max(f[i][j][p][pp],max(f[i-1][j-1][k-1][p-1]+a[i]+b[i],max(f[i-1][j][p][pp],max(f[i-1][j-1][p][pp]+a[i],f[i-1][j][p-1][pp]+b[i]))));
for (int i=l;i<=k;i++)ans=max(ans,f[n][k][k][i]);
printf("%lld\n",ans);
}
return 0;
}