#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll solve(ll a, ll b, ll c, ll d){
ll B = a + b, G = c + d;
ll R = min(B, G), p = (B & 1);
auto clamp = [&](ll z){ return min(R, max(0LL, z)); };
auto add = [&](ll z, vector<ll>& v){
if (0 <= z && z <= R && (z & 1) == p) v.push_back(z);
};
auto addBothParity = [&](ll v, vector<ll>& s){
ll z = clamp(v);
ll z1 = z - ((z & 1) != p);
ll z2 = z + ((z & 1) != p);
add(z1, s);
add(z2, s);
};
vector<ll> cand;
addBothParity(0, cand);
addBothParity(R, cand);
addBothParity(b, cand);
addBothParity(d, cand);
addBothParity(B - a, cand);
addBothParity(G - c, cand);
sort(cand.begin(), cand.end());
cand.erase(unique(cand.begin(), cand.end()), cand.end());
auto score = [&](ll z){
return min(B - z, a) + min(G - z, c) + min(z, b) + min(z, d);
};
ll ans = 0;
for (ll z : cand) ans = max(ans, score(z));
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
if (FILE* f = fopen("pair.inp", "r")) {
freopen("pair.inp", "r", stdin);
freopen("pair.out", "w", stdout);
fclose(f);
}
int t;
if(!(cin >> t)) return 0;
for (int tc = 1; tc <= t; ++tc){
ll a,b,c,d;
cin >> a >> b >> c >> d;
cout << solve(a,b,c,d);
if (tc < t) cout << ' ';
}
cout << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKbGwgc29sdmUobGwgYSwgbGwgYiwgbGwgYywgbGwgZCl7CiAgICBsbCBCID0gYSArIGIsIEcgPSBjICsgZDsKICAgIGxsIFIgPSBtaW4oQiwgRyksIHAgPSAoQiAmIDEpOwoKICAgIGF1dG8gY2xhbXAgPSBbJl0obGwgeil7IHJldHVybiBtaW4oUiwgbWF4KDBMTCwgeikpOyB9OwoKICAgIGF1dG8gYWRkID0gWyZdKGxsIHosIHZlY3RvcjxsbD4mIHYpewogICAgICAgIGlmICgwIDw9IHogJiYgeiA8PSBSICYmICh6ICYgMSkgPT0gcCkgdi5wdXNoX2JhY2soeik7CiAgICB9OwoKICAgIGF1dG8gYWRkQm90aFBhcml0eSA9IFsmXShsbCB2LCB2ZWN0b3I8bGw+JiBzKXsKICAgICAgICBsbCB6ID0gY2xhbXAodik7CiAgICAgICAgbGwgejEgPSB6IC0gKCh6ICYgMSkgIT0gcCk7CiAgICAgICAgbGwgejIgPSB6ICsgKCh6ICYgMSkgIT0gcCk7CiAgICAgICAgYWRkKHoxLCBzKTsKICAgICAgICBhZGQoejIsIHMpOwogICAgfTsKCiAgICB2ZWN0b3I8bGw+IGNhbmQ7CiAgICBhZGRCb3RoUGFyaXR5KDAsIGNhbmQpOwogICAgYWRkQm90aFBhcml0eShSLCBjYW5kKTsKICAgIGFkZEJvdGhQYXJpdHkoYiwgY2FuZCk7CiAgICBhZGRCb3RoUGFyaXR5KGQsIGNhbmQpOwogICAgYWRkQm90aFBhcml0eShCIC0gYSwgY2FuZCk7CiAgICBhZGRCb3RoUGFyaXR5KEcgLSBjLCBjYW5kKTsKCiAgICBzb3J0KGNhbmQuYmVnaW4oKSwgY2FuZC5lbmQoKSk7CiAgICBjYW5kLmVyYXNlKHVuaXF1ZShjYW5kLmJlZ2luKCksIGNhbmQuZW5kKCkpLCBjYW5kLmVuZCgpKTsKCiAgICBhdXRvIHNjb3JlID0gWyZdKGxsIHopewogICAgICAgIHJldHVybiBtaW4oQiAtIHosIGEpICsgbWluKEcgLSB6LCBjKSArIG1pbih6LCBiKSArIG1pbih6LCBkKTsKICAgIH07CgogICAgbGwgYW5zID0gMDsKICAgIGZvciAobGwgeiA6IGNhbmQpIGFucyA9IG1heChhbnMsIHNjb3JlKHopKTsKICAgIHJldHVybiBhbnM7Cn0KCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGlmIChGSUxFKiBmID0gZm9wZW4oInBhaXIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oInBhaXIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigicGFpci5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICAgICAgZmNsb3NlKGYpOwogICAgfQoKICAgIGludCB0OyAKICAgIGlmKCEoY2luID4+IHQpKSByZXR1cm4gMDsKICAgIGZvciAoaW50IHRjID0gMTsgdGMgPD0gdDsgKyt0Yyl7CiAgICAgICAgbGwgYSxiLGMsZDsgCiAgICAgICAgY2luID4+IGEgPj4gYiA+PiBjID4+IGQ7CiAgICAgICAgY291dCA8PCBzb2x2ZShhLGIsYyxkKTsKICAgICAgICBpZiAodGMgPCB0KSBjb3V0IDw8ICcgJzsKICAgIH0KICAgIGNvdXQgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9Cg==