#include <bits/stdc++.h>
using namespace std;
int dx[6]={0,0,1,-1,1,-1},t,Link[110],dy[6]={1,-1,0,0,-1,1},T,a,b,c,p[510][510];
bool vis[110];
struct dsa{int v,nex;}e[200010];
struct das{int X,Y;}q[10010];
bool Check(int x,int y)
{
	if (x<-2*a+1||x>2*a-1) return false;
	if (y<-2*b+1||y>2*b-1) return false;
	if (x%2==0&&y%2==0) return false;
	if(x+y<-2*c+1||x+y>2*c-1) return false;
	return true;
}
void Insert(int x,int y) {e[++t].nex=Link[x];e[t].v=y;Link[x]=t;return ;}
int main()
{
	freopen("geometry.in","r",stdin);
	freopen("geometry.out","w",stdout);
	scanf("%d",&T);
	for (int i1=1;i1<=T;i1++) {
		int tot=0,Max=0,cnt=0;
		scanf("%d%d%d",&a,&b,&c);
		for (int x=-2*a+1;x<=2*a-1;x++)
		  for (int y=-2*b+1;y<=2*b-1;y++)
		    if (Check(x,y)) {
				p[x+2*a][y+2*b]=++tot;
				q[tot].X=x;q[tot].Y=y;
			}
		for (int i=1;i<=tot;i++) {
			int x=q[i].X,y=q[i].Y;
			for (int j=0;j<6;j++) {
				int xx=x+dx[j],yy=y+dy[j];
				if (Check(xx,yy)) 
				  Insert(i,p[xx+2*a][yy+2*b]);
			}
		}
		for (int S=1;S<(1<<tot);S++) {
			int s=0;
			for (int i=1;i<=tot;i++) vis[i]=false;
			for (int i=1;i<=tot;i++)
			  if (S>>(i-1)&1) s++,vis[i]=true; 
			bool fla=true;
			for (int i=1;i<=tot;i++)
			  if (vis[i])
			  for (int j=Link[i];j;j=e[j].nex) 
			    if (vis[e[j].v]) {fla=false;break;}
			if (!fla) continue;
			if (fla) {
				if (s>Max) Max=s,cnt=1;
				else if (s==Max) cnt++;
			}
		}
		printf("%d %d\n",Max,cnt);
		t=0;
		for (int i=1;i<=tot;i++) Link[i]=0;
	}
	return 0;
}
