Monocarp had a sequence a consisting of n + m integers a_1, a_2, ..., a_{n + m}. He painted the elements into two colors, red and blue; n elements were painted red, all other m elements were painted blue.

After painting the elements, he has written two sequences r_1, r_2, ..., r_n and b_1, b_2, ..., b_m. The sequence r consisted of all red elements of a in the order they appeared in a; similarly, the sequence b consisted of all blue elements of a in the order they appeared in a as well.

Unfortunately, the original sequence was lost, and Monocarp only has the sequences r and b. He wants to restore the original sequence. In case there are multiple ways to restore it, he wants to choose a way to restore that maximizes the value of 

$$$f(a) = max(0, a_1, (a_1 + a_2), (a_1 + a_2 + a_3), ..., (a_1 + a_2 + a_3 + ... + a_{n + m}))$$$

Help Monocarp to calculate the maximum possible value of f(a).

Input

The first line contains one integer t (1 ≤ t ≤ 1000) — the number of test cases. Then the test cases follow. Each test case consists of four lines.

The first line of each test case contains one integer n (1 ≤ n ≤ 100).

The second line contains n integers r_1, r_2, ..., r_n (-100 ≤ r_i ≤ 100).

The third line contains one integer m (1 ≤ m ≤ 100).

The fourth line contains m integers b_1, b_2, ..., b_m (-100 ≤ b_i ≤ 100).

Output

For each test case, print one integer — the maximum possible value of f(a).

Example

Input


4
4
6 -5 7 -3
3
2 3 -4
2
1 1
4
10 -3 2 2
5
-1 -2 -3 -4 -5
5
-1 -2 -3 -4 -5
1
0
1
0


Output


13
13
0
0

Note

In the explanations for the sample test cases, red elements are marked as bold.

In the first test case, one of the possible sequences a is [6, 2, -5, 3, 7, -3, -4].

In the second test case, one of the possible sequences a is [10, 1, -3, 1, 2, 2].

In the third test case, one of the possible sequences a is [-1, -1, -2, -3, -2, -4, -5, -3, -4, -5].

In the fourth test case, one of the possible sequences a is [0, 0].
//souviksn7
//crush pupil

#include<bits/stdc++.h>
#define ll long long
#define int  long long
#include<algorithm>
#include<numeric>
#include<utility>
#include<vector>
//#include <boost/lexical_cast.hpp>// for lexical_cast()
//#define ll long long
#define f0(i,n) for(ll i=0;i<n;i++)
#define f1(i,n) for(ll i=1;i<=n;i++)
#define f(i,a,b) for(ll i=a;i<b;i++)
//#define fin0 for(ll i=n;i>0;i--)
#define tc(t) int t; cin >> t; while (t--)
#define fio ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define rr return
#define vi vector<ll>
#define sz size()
#define endl "\n"
#define bs binary_search
#define ss string
#define pb push_back
//#define beg begin()
//#define end end()
#define all(v) v.begin(),v.end()
#define sp " "

using namespace std;
ll gcd(ll a,int b) {if(b==0) return a; else return gcd(b,a%b); }
ll  mod(ll  a,ll  b) { if(a>b) return (a-b);  else return (b-a);}
double distance(ll  x1, ll  y1, ll  x2, ll  y2){ return sqrt(pow(x2 - x1, 2) +pow(y2 - y1, 2) * 1.0);}
int fact(int n){int res = 1; for (int i = 2; i <= n; i++) res = res * i;  return res;}
int nCr(int n, int r){ return fact(n) / (fact(r) * fact(n - r));}
bool isPerfectSquare(long double x){long double sr = sqrt(x);return ((sr - floor(sr)) == 0);}
bool palindrome(ss s,int i,int j)
{
     if(i>=j)
          return true;
     if(s[i]!=s[j])
          return false;
     else
         palindrome( s, i+1, j-1);
}
bool isPrime(int n)
{
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}

bool isPowerOfTwo(int n)
{
   if(n==0)
   return false;

   return (ceil(log2(n)) == floor(log2(n)));
}
 signed main()
 {
  fio;
     tc(t)
     {
       int n,m;
       cin>>n;
       int red[n];
       f0(i,n)
       cin>>red[i];
       cin>>m;
       int blue[m];
       f0(i,m)
       cin>>blue[i];
       int sum=0;
       int j=n;
       for(int i=0;i<n;i++)
       {
        if(red[i]>=0)
        {
          sum+=red[i];
        }
        else
        {
          j=i;
          break;
        }
       }
       int k=m;
       for(int i=0;i<m;i++)
        {
          if(blue[i]>=0)
           sum+=blue[i];
          else
          {
            k=i;
            break;
          }
        }

        int re=0;
       for(int p=j;p<n;p++)
       {
         re+=red[p];
         if(re>0)
          {
            sum+=re;
            re=0;
          }
       } 
        //cout<<sum<<endl;
       int bl=0;
       for(int q=k;q<m;q++)
       {
         bl+=blue[q];
         if(bl>0)
         {
          sum+=bl;
          bl=0;
         }
       }
      cout<<sum<<endl;
     }
      return 0;
 }
