#include <bits/stdc++.h>
using namespace std;
int mex(const multiset<int> &s) {
  int ans = 0;
  while (s.find(ans) != s.end()) {
    ans++;
  }
  return ans;
}
vector<int> period[6][6][6][3];
vector<int> predperiod[6][6][6][3];
void grundy_precalc() {
  for (int x = 1; x <= 5; x++) {
    for (int y = 1; y <= 5; y++) {
      for (int z = 1; z <= 5; z++) {
        int grundy[100][3];
        grundy[0][0] = grundy[0][1] = grundy[0][2] = 0;
        for (int i = 1; i < 100; i++) {
          multiset<int> s;
          s.emplace(grundy[max(i - x, 0)][0]);
          s.emplace(grundy[max(i - y, 0)][1]);
          s.emplace(grundy[max(i - z, 0)][2]);
          grundy[i][0] = mex(s);
          s.erase(s.find(grundy[max(i - y, 0)][1]));
          grundy[i][1] = mex(s);
          s.emplace(grundy[max(i - y, 0)][1]);
          s.erase(s.find(grundy[max(i - z, 0)][2]));
          grundy[i][2] = mex(s);
        }
        for (int c = 0; c < 3; c++) {
          bool run = true;
          for (int i = 0; i < 100 && run; i++) {
            for (int j = 2; j < 100 - i && run; j++) {
              if ((100 - i) % j == 0) {
                bool flag = true;
                for (int id = i; id < 100; id++) {
                  if (grundy[id][c] != grundy[(id - i) % j + i][c]) {
                    flag = false;
                    break;
                  }
                }
                if (flag) {
                  for (int id = 0; id < i; id++) {
                    predperiod[x][y][z][c].emplace_back(grundy[id][c]);
                  }
                  for (int id = i; id < i + j; id++) {
                    period[x][y][z][c].emplace_back(grundy[id][c]);
                  }
                  run = false;
                }
              }
            }
          }
          assert(!run);
        }
      }
    }
  }
}
int grundy(int x, int y, int z, long long i, int j) {
  if (predperiod[x][y][z][j].size() > i) {
    return predperiod[x][y][z][j][i];
  }
  i -= predperiod[x][y][z][j].size();
  return period[x][y][z][j][i % period[x][y][z][j].size()];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  grundy_precalc();
  int t;
  cin >> t;
  while (t--) {
    int n;
    cin >> n;
    int x, y, z;
    cin >> x >> y >> z;
    vector<long long> arr(n);
    int cnt = 0, p = 0;
    for (auto &i : arr) {
      cin >> i;
      p ^= grundy(x, y, z, i, 0);
    }
    for (auto &i : arr) {
      if ((p ^ grundy(x, y, z, i, 0) ^ grundy(x, y, z, max(i - x, 0LL), 0)) ==
          0) {
        cnt++;
      }
      if ((p ^ grundy(x, y, z, i, 0) ^ grundy(x, y, z, max(i - y, 0LL), 1)) ==
          0) {
        cnt++;
      }
      if ((p ^ grundy(x, y, z, i, 0) ^ grundy(x, y, z, max(i - z, 0LL), 2)) ==
          0) {
        cnt++;
      }
    }
    cout << cnt << '\n';
  }
  return 0;
}
