#include <bits/stdc++.h>
using namespace std;
int n[3], m[3], s[3];
long long nn, mm, ss, ans;
vector<pair<int, int> > fs, fn;
vector<long long> bad;
vector<pair<int, int> > pfactor(int s[]) {
  vector<int> t1;
  for (int i{0}; i < 3; i++) {
    int t2 = s[i];
    while (t2 > 1) {
      for (int j = 2;; j++)
        if (!(t2 % j)) {
          t2 /= j;
          t1.push_back(j);
          break;
        }
    }
  }
  sort(t1.begin(), t1.end());
  vector<pair<int, int> > ans;
  for (int u = 0; u < t1.size();) {
    int v = t1[u];
    int count = 0;
    while (u < t1.size() && t1[u] == v) {
      u++;
      count++;
    }
    ans.push_back(make_pair(v, count));
  }
  return ans;
}
void calcDiv(int pos, long long val) {
  if (pos == fs.size()) {
    if (val <= nn) ans++;
    return;
  }
  long long calc = 1;
  for (int i{0}; i < fs[pos].second + 1; i++) {
    calcDiv(pos + 1, val * calc);
    calc *= fs[pos].first;
  }
}
void calc2(int pos, long long val, int taken) {
  if (pos == bad.size()) {
    if (!taken) return;
    if (taken & 1)
      ans -= mm / val;
    else
      ans += mm / val;
    return;
  }
  calc2(pos + 1, val, taken);
  calc2(pos + 1, val * bad[pos], taken + 1);
}
int main() {
  int t;
  cin >> t;
  while (t--) {
    ans = 0;
    for (int i{0}; i < 3; i++) cin >> n[i];
    for (int i{0}; i < 3; i++) cin >> m[i];
    for (int i{0}; i < 3; i++) cin >> s[i];
    s[0] *= 2;
    nn = (long long)n[0] * n[1] * n[2];
    mm = (long long)m[0] * m[1] * m[2];
    ss = (long long)s[0] * s[1] * s[2];
    fs = pfactor(s);
    calcDiv(0, 1);
    fn = pfactor(n);
    bad.clear();
    for (int i{0}; i < fn.size(); i++) {
      int t1 = 0;
      for (int j{0}; j < fs.size(); j++)
        if (fn[i].first == fs[j].first) t1 = fs[j].second;
      if (fn[i].second > t1) {
        t1++;
        long long prod = 1;
        while (t1--) prod *= fn[i].first;
        bad.push_back(prod);
      }
    }
    calc2(0, 1, 0);
    ans += mm;
    printf("%I64d\n", ans);
  }
}
