#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <cmath>
using namespace std;
int vis[210][210],ans[210];
struct State
{
int v[3],dist;
bool operator < (const State &rhs) const
{
return dist>rhs.dist;
}
};
void updata_ans(State u)
{
for(int i=0;i<3;i++)
{
int d=u.v[i];
if(ans[d]==-1||u.dist<ans[d]) ans[d]=u.dist;
}
}
void BFS(int a,int b,int c,int d)
{
memset(vis,0,sizeof(vis));
memset(ans,-1,sizeof(ans));
int cup[3];
cup[0]=a,cup[1]=b,cup[2]=c;
priority_queue <State> q;
State start;
start.v[0]=0,start.v[1]=0,start.v[2]=c;
q.push(start);
vis[0][0]=1;
while(!q.empty())
{
State u=q.top();
q.pop();
updata_ans(u);
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(i!=j)
{
if(u.v[i]==0||u.v[j]==cup[j]) continue;
int amount=min(cup[j],u.v[j]+u.v[i])-u.v[j];
State u2;
memcpy(&u2,&u,sizeof(u));
u2.v[i]-=amount;
u2.v[j]+=amount;
if(vis[u2.v[0]][u2.v[1]]==0)
{
vis[u2.v[0]][u2.v[1]]=1;
q.push(u2);
}
}
}
}
}
while(d>=0)
{
if(ans[d]>=0)
{
cout<<ans[d]<<" "<<d<<endl;
return;
}
d--;
}
}
int main()
{
freopen("input.txt","r",stdin);
int T;
cin>>T;
while(T--)
{
int a,b,c,d;
cin>>a>>b>>c>>d;
BFS(a,b,c,d);
}
return 0;
}