#include <bits/stdc++.h>
#define fi first
#define endl '\n'
#define se second
#define int long long
#define getName(x) #x
#define vi std::vector<int>
#define isz(v) (int) v.size()
#define pii std::pair<int, int>
#define all(v) v.begin(), v.end()
#define loop cerr << "here" << endl;
#define breakLoop if(TIME > 1) break;
#define TIME 1.0 * clock() / CLOCKS_PER_SEC
using namespace std;
typedef long long ll;


template <typename T> void maximize(T &a, T b){if(a < b) a = b;}
template <typename T> void minimize(T &a, T b){if(a > b) a = b;}
const int MAXN = 4e5 + 7;
const int inf32 = 1e9;

int f[MAXN], a[MAXN], n, t, x, y, z;
int cur1[3];
int cur2[3];

bool valid(int a, int b, int c){
    cur1[0]=a,cur1[1]=b,cur1[2]=c;
    int p[3] = {cur2[0], cur2[1], cur2[2]};
    do{
        bool check = 1;
        int curSum = 0, curIdx = 0;
        for(int i = 0; i < 3; i++){
            int val = cur1[i];
            while(curSum < val and curIdx < 3){
                curSum += p[curIdx];
                curIdx++;
            }
            if(curSum >= val){
                curSum = 0;
                continue;
            }
            check = 0;
            break;
        }
        if(check) return 1;
    }while(next_permutation(p, p + 3));
    return 0;
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    #define task "fight"
    if (fopen(task".inp", "r")){
        freopen(task".inp", "r", stdin);
        freopen(task".out", "w", stdout);
    }

    cin >> t;
    //t = min(t, 400005);
    while(t--){
        cin >> n;
        cin >> x >> y >> z;
        for(int i = 1; i <= n; i++) cin >> a[i];
//        if(x > y) swap(x, y);
//        if(y > z) swap(y, z);
//        if(x > z) swap(x, z);
        fill(f + 1, f + 1 + n, inf32);
        cur2[0]=x,cur2[1]=y,cur2[2]=z;
        sort(cur2, cur2 + 3);
        for(int i = 1; i <= n; i++){
            if(f[i - 1] != inf32 and valid(0, 0, a[i])) f[i] = f[i - 1] + 1;
            if(i > 1 and f[i - 2] != inf32 and valid(0, a[i - 1], a[i])) minimize(f[i], f[i - 2] + 1);
            if(i > 2 and f[i - 3] != inf32 and valid(a[i - 2], a[i - 1], a[i]))minimize(f[i], f[i - 3] + 1);
        }
        cout << (f[n] == inf32 ? -1 : f[n]) << ' ';
    }


}
