#include using namespace std; const int MAXN = 50005; struct node { long long x; int id; bool operator < (const node &b) const { return x < b.x; } }l[MAXN], r[MAXN]; long long a[MAXN], b[MAXN], c[MAXN]; long long sumal[MAXN], sumar[MAXN], sumb[MAXN], sumc[MAXN]; double lx[MAXN], rx[MAXN]; int main() { //freopen("in.txt", "r", stdin); int T; scanf("%d", &T); while (T--) { int n; vector vec; scanf("%d", &n); for (int i = 1; i <= n; i++) { long long ll, rr; scanf("%I64d%I64d%I64d%I64d%I64d", &ll, &rr, &a[i], &b[i], &c[i]); l[i] = (node) {ll, i}; r[i] = (node) {rr, i}; vec.push_back(ll); vec.push_back(rr); } sort (l + 1, l + 1 + n); sort (r + 1, r + 1 + n); long long suma = 0; for (int i = 1; i <= n; i++) suma += a[i]; for (int i = 1; i <= n; i++) { int id = r[i].id; sumar[i] = sumar[i - 1] + a[id]; sumb[i] = sumb[i - 1] + b[id]; } for (int i = 1; i <= n; i++) { int id = l[i].id; sumal[i] = sumal[i - 1] + a[id]; sumc[i] = sumc[i - 1] + c[id]; } for (int i = 1; i <= n; i++) lx[i] = l[i].x; for (int i = 1; i <= n; i++) rx[i] = r[i].x; long long ans = 0; sort (vec.begin(), vec.end()); vec.erase( unique( vec.begin(), vec.end() ), vec.end() ); int cnt = vec.size(); for (int i = 1; i < cnt; i++) vec.push_back((vec[i] + vec[i - 1]) / 2.0); sort (vec.begin(), vec.end()); cnt = vec.size(); for (int i = 0; i < cnt; i++) { //cout << i << " : " << vec[i] << endl; int tr = lower_bound(rx + 1, rx + 1 + n, vec[i]) - 1 - rx; int tl = upper_bound(lx + 1, lx + 1 + n, vec[i]) - 1 - lx; //printf("l = %d r = %d\n", tl, tr); ans = max(ans, suma - sumar[tr] + sumb[tr] - (sumal[n] - sumal[tl]) + (sumc[n] - sumc[tl])) ; //printf("%I64d\n", suma - sumar[tr] + sumb[tr] - (sumal[n] - sumal[tl]) + (sumc[n] - sumc[tl])); //printf("Left : %I64d Right : %I64d\n", - sumar[tr] + sumb[tr], - (sumal[n] - sumal[tl]) + (sumc[n] - sumc[tl])); } ans = max(ans, max(sumb[n], sumc[n])); printf("%I64d\n", ans); } return 0; }