#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#pragma GCC optimize("-Ofast")
//#pragma GCC optimize("trapv")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.2,popcnt,abm,mmx,avx2,tune=native")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-funroll-loops")

using namespace std;
using namespace __gnu_pbds;

#define vi vector<int>
#define vii vector<pair<int, int>>
#define pii pair<int, int>
#define pll pair<ll, ll>
#define loop(_) for (int __ = 0; __ < (_); ++__)
#define forn(i, n) for (int i = 0; i < n; ++i)
#define pb push_back
#define f first
#define s second
#define sz(_) ((int)_.size())
#define all(_) _.begin(), _.end()
#define uni(_) unique(_)
#define lb lower_bound
#define ub upper_bound
#define si set<int>
#define ms multiset<int>
#define qi queue<int>
#define pq prioriry_queue<int>

using ll = long long;
using ld = long double;

const int N = 1e5 + 7000;
const ll mod = 1e9 + 7;
const ll inf = 2e18;

auto ra = [] {char *p = new char ; delete p ; return ll(p) ; };
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count() * (ra() | 1));
typedef tree<pii, null_type, less<pii>, rb_tree_tag, tree_order_statistics_node_update> os;

int n;
vector<double> A(3);
double k;

double heron(double a, double b, double c)
{
        if (max({a, b, c}) * 2 > a + b + c)
                return 0;
        double s = (a + b + c) / 2.0;
        return sqrt(s * (s - a) * (s - b) * (s - c));
}

double solve(double x, double y, double z)
{
        double ret = 0;
        double l = z, r = min(z + k, x + y);
        for (int i = 0; i < 100; ++i)
        {
                double per = (r - l) / 3.0;
                if (heron(x, y, l + per) > heron(x, y, r - per))
                        r -= per;
                else
                        l += per;
        }
        return heron(x, y, l);
}

int main()
{
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        freopen("sticks.in", "r", stdin);
        int t;
        cin >> t;

        while (t--)
        {
                for (auto &u : A)
                        cin >> u;
                cin >> k;
                sort(all(A));
                cout << fixed << setprecision(10) << solve(A[1], A[2], A[0]) << "\n";
        }

        return 0;
}
