#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;
}