#include <bits/stdc++.h>
#define SZ(X) ((int)(X).size())
#define ALL(X) (X).begin(), (X).end()
#define REP(I, N) for (int I = 0; I < (N); ++I)
#define REPP(I, A, B) for (int I = (A); I < (B); ++I)
#define RREP(I, N) for (int I= (N)-1; I>=0; --I)
#define RREPP(I, A, B) for(int I = (B)-1; I>=A; --I)
#define CASET int ___T, case_n = 1; scanf("%d ", &___T); while (___T-- > 0)
#define MP make_pair
#define PB push_back
#define MS0(X) memset((X), 0, sizeof((X)))
#define MS1(X) memset((X), -1, sizeof((X)))
#define LEN(X) strlen(X)
#define F first
#define S second
#define debug(A) REP(i, A.size()) cerr << A[i] << ' '; cerr << '\n'
using namespace std;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef long long lld;
typedef unsigned long long ulld;
typedef pair<lld, lld> plld;
typedef vector<lld> vlld;
typedef vector<vlld> vvlld;
typedef long double ld;
typedef vector<ld> vld;
typedef vector<vld> vvld;
const int inf = 987654321;
struct Result { int minPsum, maxPsum, maxi; };
Result merge(const Result& a, const Result& b){
Result ret;
ret.minPsum=min(a.minPsum, b.minPsum);
ret.maxPsum=max(a.maxPsum, b.maxPsum);
ret.maxi=max( max(a.maxi, b.maxi), b.maxPsum - a.minPsum );
return ret;
}
struct snode {
int i, j; Result res;
snode *l, *r;
snode(int i, int j, const vi& arr): i(i), j(j) {
if (j - i == 1) {
l = r = NULL;
res.maxi = -inf; res.minPsum = res.maxPsum = arr[i];
} else {
int k = i + j >> 1;
l = new snode(i, k, arr);
r = new snode(k, j, arr);
res = merge( l->res, r->res );
}
}
~snode() { delete l, r; }
Result query(int I, int J) {
if (I <= i && j <= J) {
return res;
} else if (j <= I || J <= i) {
return {inf, -inf, -inf};
} else {
return merge( l->query(I,J), r->query(I,J) );
}
}
};
struct segment {
snode *root;
segment() : root(0) {}
void init(int n, const vi& arr) {
if(root) delete root;
root = new snode(0, n, arr);
}
int query(int a, int b, int c, int d) {
if(b>c){
auto res = root->query(c, b+1);
return max( res.maxi, max(query(a, c, c, d), query(a, b, b, d)) );
}else{
auto l=root->query(a, b), r=root->query(c+1, d+1);
// cout<<r.maxPsum<<"-"<<l.minPsum<<" = ";
return r.maxPsum - l.minPsum;
}
}
};
const int MAXN=1e4+10;
int T,N,Q, a,b,c,d; vi arr(MAXN);
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&N);
REP(i, N){
scanf("%d",&arr[i+1]);
arr[i+1]+=arr[i];
}
segment tree; tree.init(N+1, arr);
scanf("%d",&Q);
while(Q--){
scanf("%d%d%d%d",&a,&b,&c,&d); a--;c--;
printf("%d\n", tree.query(a,b,c,d) );
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgU1ooWCkgKChpbnQpKFgpLnNpemUoKSkKI2RlZmluZSBBTEwoWCkgKFgpLmJlZ2luKCksIChYKS5lbmQoKQojZGVmaW5lIFJFUChJLCBOKSBmb3IgKGludCBJID0gMDsgSSA8IChOKTsgKytJKQojZGVmaW5lIFJFUFAoSSwgQSwgQikgZm9yIChpbnQgSSA9IChBKTsgSSA8IChCKTsgKytJKQojZGVmaW5lIFJSRVAoSSwgTikgZm9yIChpbnQgST0gKE4pLTE7IEk+PTA7IC0tSSkKI2RlZmluZSBSUkVQUChJLCBBLCBCKSBmb3IoaW50IEkgPSAoQiktMTsgST49QTsgLS1JKQojZGVmaW5lIENBU0VUIGludCBfX19ULCBjYXNlX24gPSAxOyBzY2FuZigiJWQgIiwgJl9fX1QpOyB3aGlsZSAoX19fVC0tID4gMCkKI2RlZmluZSBNUCBtYWtlX3BhaXIKI2RlZmluZSBQQiBwdXNoX2JhY2sKI2RlZmluZSBNUzAoWCkgbWVtc2V0KChYKSwgMCwgc2l6ZW9mKChYKSkpCiNkZWZpbmUgTVMxKFgpIG1lbXNldCgoWCksIC0xLCBzaXplb2YoKFgpKSkKI2RlZmluZSBMRU4oWCkgc3RybGVuKFgpCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgZGVidWcoQSkgUkVQKGksIEEuc2l6ZSgpKSBjZXJyIDw8IEFbaV0gPDwgJyAnOyBjZXJyIDw8ICdcbicKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3Rvcjx2aT4gdnZpOwogCnR5cGVkZWYgbG9uZyBsb25nIGxsZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsZDsKdHlwZWRlZiBwYWlyPGxsZCwgbGxkPiBwbGxkOwp0eXBlZGVmIHZlY3RvcjxsbGQ+IHZsbGQ7CnR5cGVkZWYgdmVjdG9yPHZsbGQ+IHZ2bGxkOwogCnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgdmVjdG9yPGxkPiB2bGQ7CnR5cGVkZWYgdmVjdG9yPHZsZD4gdnZsZDsKCmNvbnN0IGludCBpbmYgPSA5ODc2NTQzMjE7CgpzdHJ1Y3QgUmVzdWx0IHsgaW50IG1pblBzdW0sIG1heFBzdW0sIG1heGk7IH07ClJlc3VsdCBtZXJnZShjb25zdCBSZXN1bHQmIGEsIGNvbnN0IFJlc3VsdCYgYil7CglSZXN1bHQgcmV0OwoJcmV0Lm1pblBzdW09bWluKGEubWluUHN1bSwgYi5taW5Qc3VtKTsKCXJldC5tYXhQc3VtPW1heChhLm1heFBzdW0sIGIubWF4UHN1bSk7CglyZXQubWF4aT1tYXgoIG1heChhLm1heGksIGIubWF4aSksIGIubWF4UHN1bSAtIGEubWluUHN1bSApOwoJcmV0dXJuIHJldDsKfQpzdHJ1Y3Qgc25vZGUgewogICAgaW50IGksIGo7IFJlc3VsdCByZXM7CiAgICBzbm9kZSAqbCwgKnI7CiAgICBzbm9kZShpbnQgaSwgaW50IGosIGNvbnN0IHZpJiBhcnIpOiBpKGkpLCBqKGopIHsKICAgICAgICBpZiAoaiAtIGkgPT0gMSkgewogICAgICAgICAgICBsID0gciA9IE5VTEw7CiAgICAgICAgICAgCXJlcy5tYXhpID0gLWluZjsgcmVzLm1pblBzdW0gPSByZXMubWF4UHN1bSA9IGFycltpXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbnQgayA9IGkgKyBqID4+IDE7CiAgICAgICAgICAgIGwgPSBuZXcgc25vZGUoaSwgaywgYXJyKTsKICAgICAgICAgICAgciA9IG5ldyBzbm9kZShrLCBqLCBhcnIpOwogICAgICAgICAgICByZXMgPSBtZXJnZSggbC0+cmVzLCByLT5yZXMgKTsKICAgICAgICB9CiAgICB9CiAgICB+c25vZGUoKSB7IGRlbGV0ZSBsLCByOyB9CiAgICBSZXN1bHQgcXVlcnkoaW50IEksIGludCBKKSB7CiAgICAgICAgaWYgKEkgPD0gaSAmJiBqIDw9IEopIHsKICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICB9IGVsc2UgaWYgKGogPD0gSSB8fCBKIDw9IGkpIHsKICAgICAgICAgICAgcmV0dXJuIHtpbmYsIC1pbmYsIC1pbmZ9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBtZXJnZSggbC0+cXVlcnkoSSxKKSwgci0+cXVlcnkoSSxKKSApOwogICAgICAgIH0KICAgIH0KfTsKIApzdHJ1Y3Qgc2VnbWVudCB7CiAgICBzbm9kZSAqcm9vdDsKICAgIHNlZ21lbnQoKSA6IHJvb3QoMCkge30KICAgIHZvaWQgaW5pdChpbnQgbiwgY29uc3QgdmkmIGFycikgewogICAgICAgIGlmKHJvb3QpIGRlbGV0ZSByb290OwogICAgICAgIHJvb3QgPSBuZXcgc25vZGUoMCwgbiwgYXJyKTsKICAgIH0KICAgIGludCBxdWVyeShpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCkgewogICAgCWlmKGI+Yyl7CiAgICAJCWF1dG8gcmVzID0gcm9vdC0+cXVlcnkoYywgYisxKTsKICAgIAkJcmV0dXJuIG1heCggcmVzLm1heGksICBtYXgocXVlcnkoYSwgYywgYywgZCksIHF1ZXJ5KGEsIGIsIGIsIGQpKSApOwogICAgCX1lbHNlewogICAgCQlhdXRvIGw9cm9vdC0+cXVlcnkoYSwgYiksIHI9cm9vdC0+cXVlcnkoYysxLCBkKzEpOwogICAgCQkvLyBjb3V0PDxyLm1heFBzdW08PCItIjw8bC5taW5Qc3VtPDwiID0gIjsKICAgIAkJcmV0dXJuIHIubWF4UHN1bSAtIGwubWluUHN1bTsKICAgIAl9CiAgICB9Cn07CmNvbnN0IGludCBNQVhOPTFlNCsxMDsKaW50IFQsTixRLCBhLGIsYyxkOyB2aSBhcnIoTUFYTik7CmludCBtYWluKCl7CglzY2FuZigiJWQiLCZUKTsKCXdoaWxlKFQtLSl7CgkJc2NhbmYoIiVkIiwmTik7CgkJUkVQKGksIE4peyAKCQkJc2NhbmYoIiVkIiwmYXJyW2krMV0pOwoJCQlhcnJbaSsxXSs9YXJyW2ldOwoJCX0KCQlzZWdtZW50IHRyZWU7IHRyZWUuaW5pdChOKzEsIGFycik7CgkJc2NhbmYoIiVkIiwmUSk7CgkJd2hpbGUoUS0tKXsKCQkJc2NhbmYoIiVkJWQlZCVkIiwmYSwmYiwmYywmZCk7IGEtLTtjLS07CgkJCXByaW50ZigiJWRcbiIsIHRyZWUucXVlcnkoYSxiLGMsZCkgKTsKCQl9CQkKCX0KICAgIHJldHVybiAwOwp9