#include <cstdio>   #include <cstring>   #include <queue>   #include <cmath>   #include <set>   #include <cstdlib>   #include <iostream>   #include <map>   #include <algorithm>   using namespace std;   typedef long long ll;   typedef unsigned long long ull;   typedef unsigned int uii;   typedef pair<int, ll> pii;   template<typename T>   inline void rd(T& x)   {    int tmp = 1; char c = getchar(); x = 0;    while (c >  9  || c <  0 ) { if (c ==  - )tmp = -1; c = getchar(); }    while (c >=  0  && c <=  9 ) { x = x * 10 + c -  0 ; c = getchar(); }    x *= tmp;   }   const int N = 2e5 + 10;   const int M = 1e6 + 10;   const int mod = 1e9 + 7;   const int inf = 0x3f3f3f3f;   const double eps = 1e-5;   int sgn(double x) {    if (fabs(x) < eps) return 0;    if (x > 0) return 1;    return -1;   }   int n, m, k;   int head[N], cntE;   struct edge {    int to, next;    int w;   }e[M];   void add(int u, int v, int w = 0) {    e[cntE].to = v;    e[cntE].next = head[u];    e[cntE].w = w;    head[u] = cntE++;   }   bool vis[N];   int stk[N], top;   bool dfs(int x) {    if (vis[x ^ 1]) return false;    if (vis[x]) return true;    vis[x] = true;    stk[++top] = x;    for (int i = head[x]; ~i; i = e[i].next) {     int v = e[i].to;     if (!dfs(v)) return false;    }    return true;   }   bool two_sat() {    memset(vis, false, sizeof(bool) * (2 * n + 10));    for (int i = 0; i < n; ++i) {     if (vis[i << 1] || vis[i << 1 | 1]) continue;     top = 0;     if (!dfs(i << 1)) {      while (top) vis[stk[top--]] = false;      if (!dfs(i << 1 | 1)) return false;     }    }    return true;   }   ll a[N], b[N], c[N], maxn[N];   ll solve() {    maxn[n] = c[n] - 1 + 2;    ll ans = 0;    for (int i = n - 1; i > 0; --i) {     ans = max(ans, maxn[i + 1] + b[i + 1] - a[i + 1]);     maxn[i] = c[i] - 1;     if (b[i+1] == a[i+1]) {     // maxn[i] = c[i] + 1;     }     else {      maxn[i] = max(maxn[i], maxn[i + 1] + (c[i] - 1 - (b[i + 1] - a[i + 1])));     }     maxn[i] += 2;    }    return ans;   }   int main() {   #ifdef _DEBUG    FILE* _INPUT = freopen( input.txt ,  r , stdin);    // FILE* _OUTPUT = freopen( output.txt ,  w , stdout);   #endif // !_DEBUG    int cas = 0, T;    rd(T);    while (T--) {   // while (~scanf( %d , &n)) {     rd(n);     for (int i = 1; i <= n; ++i) rd(c[i]);     for (int i = 1; i <= n; ++i) rd(a[i]);     for (int i = 1; i <= n; ++i) rd(b[i]);     for (int i = 1; i <= n; ++i) if (a[i] > b[i]) swap(a[i], b[i]);     printf( %lld n , solve());    }    return 0;   }