#include<iostream>
#include<algorithm>
#include<ctype.h>
#include<string>
#include<string.h>
#include<fstream>
#include<vector>
#include<queue>
#include"iomanip"
using namespace std;
int vis[101][101][101]; //用来记录已经达到的状态
struct Node
{
int now_Water[3];
int max_Water[3];
int step;
}node,temp;
queue<Node> q;
int bfs()
{
int e[3];
cin>>node.max_Water[0]>>node.max_Water[1]>>node.max_Water[2];
cin>>e[0]>>e[1]>>e[2];
node.step = 0;
node.now_Water[0] = node.max_Water[0];
node.now_Water[1] = 0;
node.now_Water[2] = 0;
q.push(node);
//vis[node.now_Water[0]][node.now_Water[1]][node.now_Water[2]] = 1;
if(node.now_Water[0] == e[0] && node.now_Water[1] == e[1] && node.now_Water[2] == e[2] )
return 0;
while(!q.empty())
{
node = q.front();
q.pop();
// 1->2 1->3 2->3 2->1 3->1 3->2
vis[node.now_Water[0]][node.now_Water[1]][node.now_Water[2]] = 1;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(i!=j)
{
temp = node;
if(node.now_Water[i]!=0)
{
if(node.now_Water[j] + node.now_Water[i] <= node.max_Water[j])
{
temp.now_Water[j] = node.now_Water[j] + node.now_Water[i];
temp.now_Water[i] = 0;
temp.step = node.step + 1;
if(temp.now_Water[0] == e[0] && temp.now_Water[1] == e[1] && temp.now_Water[2] == e[2] )
return temp.step;
if(vis[temp.now_Water[0]][temp.now_Water[1]][temp.now_Water[2]] == 0)
q.push(temp);
}
else
{
temp.now_Water[i] = node.now_Water[i] - (node.max_Water[j]-node.now_Water[j]);
temp.now_Water[j] = node.max_Water[j];
temp.step = node.step + 1;
if(temp.now_Water[0] == e[0] && temp.now_Water[1] == e[1] && temp.now_Water[2] == e[2] )
return temp.step;
if(vis[temp.now_Water[0]][temp.now_Water[1]][temp.now_Water[2]] == 0)
q.push(temp);
}
}
}
}
}
}
return -1;
}
int main()
{
int n;
cin>>n;
while(n--)
{
while(!q.empty())
{
q.pop();
}
for(int i=0;i<101;i++)
for(int j=0;j<101;j++)
for(int k=0;k<101;k++)
vis[i][j][k]=0;
int ans = bfs();
cout<<ans<<endl;
}
return 0;
}