#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
#define int long long
#define all(x) x.begin(),x.end()
#define pb push_back
#define rall(x) x.rbegin(),x.rend()
const int N=1e5+2,mod=998244353,MOD=1e9+7,INF=9223372036854775806;
int a[N],b[N],c[N];
void build(int t[],int a[],int v,int tl,int tr){
    if(tl==tr){
        t[v]=a[tl];
        return;
    }
    int m=(tl+tr)/2;
    build(t,a,v+v,tl,m);
    build(t,a,v+v+1,m+1,tr);
    t[v]=max(t[v+v],t[v+v+1]);
}
int get(int t[],int v,int tl,int tr,int l,int r){
    if(l>tr||r<tl){
        return -INF;
    }
    else if(tl>=l&&tr<=r){
        return t[v];
    }
    int m=(tl+tr)/2;
    return max(get(t,v+v,tl,m,l,r),get(t,v+v+1,m+1,tr,l,r));
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    int T=1;
    cin>>T;
    while(T--){
        int n,ans=0;
        cin>>n;
        int p2[n+2],s2[n+2],p3[n+2],s3[n+2],t2[n+n+n+n+2],t3[n+n+n+n+2];
        p2[0]=0;
        s2[n+1]=0;
        p3[0]=0;
        s3[n+1]=0;
        map<int,vector<int>>pos2,pos3;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        for(int i=1;i<=n;i++){
            cin>>b[i];
            pos2[b[i]].pb(i);
        }
        for(int i=1;i<=n;i++){
            cin>>c[i];
            pos3[c[i]].pb(i);
        }
        build(t2,b,1,1,n);
        build(t3,c,1,1,n);
        for(int i=1;i<=n;i++){
            p2[i]=max(p2[i-1],b[i]);
            p3[i]=max(p3[i-1],c[i]);
        }
        for(int i=n;i>=1;i--){
            s2[i]=max(s2[i+1],b[i]);
            s3[i]=max(s3[i+1],c[i]);
        }
        for(int i=1;i<=n;i++){
            int x=max(p2[i-1],s2[i+1]),y=max(p3[i-1],s3[i+1]);
            if(pos2[x].size()>2||pos3[y].size()>2){
                ans=max(ans,a[i]+x+y);
            }
            else if(pos2[x].size()==1&&pos3[y].size()==1){
                if(pos2[x][0]==pos3[y][0]){
                    int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][0],j2=pos3[y][0];
                    if(j1<i){
                        if(1<=j1-1){
                            y1=max(y1,get(t3,1,1,n,1,j1-1));
                        }
                        if(j1+1<=i-1){
                            y1=max(y1,get(t3,1,1,n,j1+1,i-1));
                        }
                        if(i+1<=n){
                            y1=max(y1,get(t3,1,1,n,i+1,n));
                        }
                    }
                    else if(i<j1){
                        if(1<=i-1){
                            y1=max(y1,get(t3,1,1,n,1,i-1));
                        }
                        if(i+1<=j1-1){
                            y1=max(y1,get(t3,1,1,n,i+1,j1-1));
                        }
                        if(j1+1<=n){
                            y1=max(y1,get(t3,1,1,n,j1+1,n));
                        }
                    }
                    if(j2<i){
                        if(1<=j2-1){
                            x2=max(x2,get(t2,1,1,n,1,j2-1));
                        }
                        if(j2+1<=i-1){
                            x2=max(x2,get(t2,1,1,n,j2+1,i-1));
                        }
                        if(i+1<=n){
                            x2=max(x2,get(t2,1,1,n,i+1,n));
                        }
                    }
                    else if(i<j2){
                        if(1<=i-1){
                            x2=max(x2,get(t2,1,1,n,1,i-1));
                        }
                        if(i+1<=j2-1){
                            x2=max(x2,get(t2,1,1,n,i+1,j2-1));
                        }
                        if(j2+1<=n){
                            x2=max(x2,get(t2,1,1,n,j2+1,n));
                        }
                    }
                    ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
                }
                else{
                    ans=max(ans,a[i]+x+y);
                }
            }
            else if(pos2[x].size()==2&&pos3[y].size()==1){
                if(pos2[x][0]!=i&&pos2[x][1]!=i){
                    ans=max(ans,a[i]+x+y);
                }
                else{
                    if(pos2[x][0]!=i&&pos2[x][0]==pos3[y][0]){
                        int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][0],j2=pos3[y][0];
                        if(j1<i){
                            if(1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,1,j1-1));
                            }
                            if(j1+1<=i-1){
                                y1=max(y1,get(t3,1,1,n,j1+1,i-1));
                            }
                            if(i+1<=n){
                                y1=max(y1,get(t3,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j1){
                            if(1<=i-1){
                                y1=max(y1,get(t3,1,1,n,1,i-1));
                            }
                            if(i+1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,i+1,j1-1));
                            }
                            if(j1+1<=n){
                                y1=max(y1,get(t3,1,1,n,j1+1,n));
                            }
                        }
                        if(j2<i){
                            if(1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,1,j2-1));
                            }
                            if(j2+1<=i-1){
                                x2=max(x2,get(t2,1,1,n,j2+1,i-1));
                            }
                            if(i+1<=n){
                                x2=max(x2,get(t2,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j2){
                            if(1<=i-1){
                                x2=max(x2,get(t2,1,1,n,1,i-1));
                            }
                            if(i+1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,i+1,j2-1));
                            }
                            if(j2+1<=n){
                                x2=max(x2,get(t2,1,1,n,j2+1,n));
                            }
                        }
                        ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
                    }
                    else if(pos2[x][0]==i&&pos2[x][1]==pos3[y][0]){
                        int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][1],j2=pos3[y][0];
                        if(j1<i){
                            if(1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,1,j1-1));
                            }
                            if(j1+1<=i-1){
                                y1=max(y1,get(t3,1,1,n,j1+1,i-1));
                            }
                            if(i+1<=n){
                                y1=max(y1,get(t3,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j1){
                            if(1<=i-1){
                                y1=max(y1,get(t3,1,1,n,1,i-1));
                            }
                            if(i+1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,i+1,j1-1));
                            }
                            if(j1+1<=n){
                                y1=max(y1,get(t3,1,1,n,j1+1,n));
                            }
                        }
                        if(j2<i){
                            if(1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,1,j2-1));
                            }
                            if(j2+1<=i-1){
                                x2=max(x2,get(t2,1,1,n,j2+1,i-1));
                            }
                            if(i+1<=n){
                                x2=max(x2,get(t2,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j2){
                            if(1<=i-1){
                                x2=max(x2,get(t2,1,1,n,1,i-1));
                            }
                            if(i+1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,i+1,j2-1));
                            }
                            if(j2+1<=n){
                                x2=max(x2,get(t2,1,1,n,j2+1,n));
                            }
                        }
                        ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
                    }
                    else{
                        ans=max(ans,a[i]+x+y);
                    }
                }
            }
            else if(pos2[x].size()==1&&pos3[y].size()==2){
                if(pos3[y][0]!=i&&pos3[y][1]!=i){
                    ans=max(ans,a[i]+x+y);
                }
                else{
                    if(pos3[y][0]!=i&&pos2[x][0]==pos3[y][0]){
                        int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][0],j2=pos3[y][0];
                        if(j1<i){
                            if(1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,1,j1-1));
                            }
                            if(j1+1<=i-1){
                                y1=max(y1,get(t3,1,1,n,j1+1,i-1));
                            }
                            if(i+1<=n){
                                y1=max(y1,get(t3,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j1){
                            if(1<=i-1){
                                y1=max(y1,get(t3,1,1,n,1,i-1));
                            }
                            if(i+1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,i+1,j1-1));
                            }
                            if(j1+1<=n){
                                y1=max(y1,get(t3,1,1,n,j1+1,n));
                            }
                        }
                        if(j2<i){
                            if(1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,1,j2-1));
                            }
                            if(j2+1<=i-1){
                                x2=max(x2,get(t2,1,1,n,j2+1,i-1));
                            }
                            if(i+1<=n){
                                x2=max(x2,get(t2,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j2){
                            if(1<=i-1){
                                x2=max(x2,get(t2,1,1,n,1,i-1));
                            }
                            if(i+1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,i+1,j2-1));
                            }
                            if(j2+1<=n){
                                x2=max(x2,get(t2,1,1,n,j2+1,n));
                            }
                        }
                        ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
                    }
                    else if(pos3[y][0]==i&&pos3[y][1]==pos2[x][0]){
                        int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][0],j2=pos3[y][1];
                        if(j1<i){
                            if(1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,1,j1-1));
                            }
                            if(j1+1<=i-1){
                                y1=max(y1,get(t3,1,1,n,j1+1,i-1));
                            }
                            if(i+1<=n){
                                y1=max(y1,get(t3,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j1){
                            if(1<=i-1){
                                y1=max(y1,get(t3,1,1,n,1,i-1));
                            }
                            if(i+1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,i+1,j1-1));
                            }
                            if(j1+1<=n){
                                y1=max(y1,get(t3,1,1,n,j1+1,n));
                            }
                        }
                        if(j2<i){
                            if(1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,1,j2-1));
                            }
                            if(j2+1<=i-1){
                                x2=max(x2,get(t2,1,1,n,j2+1,i-1));
                            }
                            if(i+1<=n){
                                x2=max(x2,get(t2,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j2){
                            if(1<=i-1){
                                x2=max(x2,get(t2,1,1,n,1,i-1));
                            }
                            if(i+1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,i+1,j2-1));
                            }
                            if(j2+1<=n){
                                x2=max(x2,get(t2,1,1,n,j2+1,n));
                            }
                        }
                        ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
                    }
                    else{
                        ans=max(ans,a[i]+x+y);
                    }
                }
            }
            else if(pos2[x].size()==2&&pos3[y].size()==2){
                vector<int>q2,q3;
                if(pos2[x][0]!=i){
                    q2.pb(pos2[x][0]);
                }
                if(pos2[x][1]!=i){
                    q2.pb(pos2[x][1]);
                }
                if(pos3[y][0]!=i){
                    q3.pb(pos3[y][0]);
                }
                if(pos3[y][1]!=i){
                    q3.pb(pos3[y][1]);
                }
                if(q2.size()>1||q3.size()>1){
                    ans=max(ans,a[i]+x+y);
                }
                else{
                    if(q2[0]==q3[0]){
                        int x1=x,y1=0,x2=0,y2=y,j1=q2[0],j2=q3[0];
                        if(j1<i){
                            if(1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,1,j1-1));
                            }
                            if(j1+1<=i-1){
                                y1=max(y1,get(t3,1,1,n,j1+1,i-1));
                            }
                            if(i+1<=n){
                                y1=max(y1,get(t3,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j1){
                            if(1<=i-1){
                                y1=max(y1,get(t3,1,1,n,1,i-1));
                            }
                            if(i+1<=j1-1){
                                y1=max(y1,get(t3,1,1,n,i+1,j1-1));
                            }
                            if(j1+1<=n){
                                y1=max(y1,get(t3,1,1,n,j1+1,n));
                            }
                        }
                        if(j2<i){
                            if(1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,1,j2-1));
                            }
                            if(j2+1<=i-1){
                                x2=max(x2,get(t2,1,1,n,j2+1,i-1));
                            }
                            if(i+1<=n){
                                x2=max(x2,get(t2,1,1,n,i+1,n));
                            }
                        }
                        else if(i<j2){
                            if(1<=i-1){
                                x2=max(x2,get(t2,1,1,n,1,i-1));
                            }
                            if(i+1<=j2-1){
                                x2=max(x2,get(t2,1,1,n,i+1,j2-1));
                            }
                            if(j2+1<=n){
                                x2=max(x2,get(t2,1,1,n,j2+1,n));
                            }
                        }
                        ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
                    }
                    else{
                        ans=max(ans,a[i]+x+y);
                    }
                }
            }
        }
        cout<<ans<<'\n';
    }
}