#include <bits/stdc++.h>
using namespace std;
int n1, n2, n3, m1, m2, m3, s1, s2, s3, cnt;
int fuckn[10000005], fucks[10000005];
long long n, m, s, ans, prime[3005];
struct prime_div {
  int cnt, prime[3005], num[3005];
} pn, ps;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') f = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  return x * f;
}
void calc(int n, prime_div &x, int *fuck) {
  for (int i = 2; i * i <= n; i++)
    if (n % i == 0) {
      int t;
      if (fuck[i])
        t = fuck[i];
      else
        t = fuck[i] = ++x.cnt, x.prime[t] = i;
      while (n % i == 0) n /= i, x.num[t]++;
    }
  if (n != 1) {
    int t;
    if (fuck[n])
      t = fuck[n];
    else
      t = fuck[n] = ++x.cnt, x.prime[t] = n;
    x.num[t]++;
  }
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
void clear() {
  for (int i = 1; i <= pn.cnt; i++)
    fuckn[pn.prime[i]] = 0, pn.num[i] = pn.prime[i] = 0;
  for (int i = 1; i <= ps.cnt; i++)
    fucks[ps.prime[i]] = 0, ps.num[i] = ps.prime[i] = 0;
  cnt = pn.cnt = ps.cnt = 0;
}
void dfs(int x, long long res) {
  if (x > ps.cnt) {
    ans += (res <= n);
    return;
  }
  long long tmp = 1;
  for (int i = 1; i <= ps.num[x] + 1; i++)
    dfs(x + 1, res * tmp), tmp *= ps.prime[x];
}
long long power(long long a, int k) {
  long long x = 1;
  for (; k; k >>= 1, a = a * a)
    if (k & 1) x = x * a;
  return x;
}
int main() {
  for (int T = read(); T; T--) {
    clear();
    n1 = read(), n2 = read(), n3 = read(), n = 1ll * n1 * n2 * n3;
    m1 = read(), m2 = read(), m3 = read(), m = 1ll * m1 * m2 * m3;
    s1 = read(), s2 = read(), s3 = read() * 2, s = 1ll * s1 * s2 * s3;
    calc(n1, pn, fuckn), calc(n2, pn, fuckn), calc(n3, pn, fuckn);
    calc(s1, ps, fucks), calc(s2, ps, fucks), calc(s3, ps, fucks);
    for (int i = 1; i <= pn.cnt; i++) {
      int j = fucks[pn.prime[i]];
      if (pn.num[i] > ps.num[j])
        prime[++cnt] = power(pn.prime[i], ps.num[j] + 1);
    }
    ans = m;
    for (int S = 1; S < (1 << cnt); S++) {
      int f = 1;
      long long tmp = 1;
      for (int i = 1; i <= cnt; i++)
        if ((1 << (i - 1) & S)) tmp = lcm(tmp, prime[i]), f = -f;
      ans += f * (m / tmp);
    }
    dfs(1, 1);
    printf("%lld\n", ans);
  }
  return 0;
}
