#include <bits/stdc++.h>   using namespace std;   const int MOD = 1e9 + 7;   const int MX = 2e2 + 5;   const long long INF = 1e18;   const long double PI = 4 * atan((long double)1);   const int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};   namespace io {   void setIn(string second) { freopen(second.c_str(),  r , stdin); }   void setOut(string second) { freopen(second.c_str(),  w , stdout); }   void setIO(string second =   ) {     ios_base::sync_with_stdio(0);     cin.tie(0);     if ((int)second.size()) {       setIn(second +  .in );       setOut(second +  .out );     }   }   }  // namespace io   using namespace io;   namespace input {   template <class T>   void re(complex<T>& x);   template <class T1, class T2>   void re(pair<T1, T2>& p);   template <class T>   void re(vector<T>& a);   template <class T, size_t SZ>   void re(array<T, SZ>& a);   template <class T>   void re(T& x) {     cin >> x;   }   void re(double& x) {     string t;     re(t);     x = stod(t);   }   void re(long double& x) {     string t;     re(t);     x = stold(t);   }   template <class Arg, class... Args>   void re(Arg& first, Args&... rest) {     re(first);     re(rest...);   }   template <class T>   void re(complex<T>& x) {     T a, b;     re(a, b);     x = cd(a, b);   }   template <class T1, class T2>   void re(pair<T1, T2>& p) {     re(p.first, p.second);   }   template <class T>   void re(vector<T>& a) {     for (int i = (0); i < ((int)a.size()); ++i) re(a[i]);   }   template <class T, size_t SZ>   void re(array<T, SZ>& a) {     for (int i = (0); i < (SZ); ++i) re(a[i]);   }   }  // namespace input   namespace output {   template <class T1, class T2>   void pr(const pair<T1, T2>& x);   template <class T, size_t SZ>   void pr(const array<T, SZ>& x);   template <class T>   void pr(const vector<T>& x);   template <class T>   void pr(const set<T>& x);   template <class T1, class T2>   void pr(const map<T1, T2>& x);   template <class T>   void pr(const T& x) {     cout << x;   }   template <class Arg, class... Args>   void pr(const Arg& first, const Args&... rest) {     pr(first);     pr(rest...);   }   template <class T1, class T2>   void pr(const pair<T1, T2>& x) {     pr( { , x.first,  ,  , x.second,  } );   }   template <class T>   void prContain(const T& x) {     pr( { );     bool fst = 1;     for (const auto& a : x) pr(!fst ?  ,   :   , a), fst = 0;     pr( } );   }   template <class T, size_t SZ>   void pr(const array<T, SZ>& x) {     prContain(x);   }   template <class T>   void pr(const vector<T>& x) {     prContain(x);   }   template <class T>   void pr(const set<T>& x) {     prContain(x);   }   template <class T1, class T2>   void pr(const map<T1, T2>& x) {     prContain(x);   }   void ps() { pr(  n ); }   template <class Arg>   void ps(const Arg& first) {     pr(first);     ps();   }   template <class Arg, class... Args>   void ps(const Arg& first, const Args&... rest) {     pr(first,    );     ps(rest...);   }   }  // namespace output   using namespace output;   using namespace input;   long long add(long long a, long long b) {     a += b;     if (a >= MOD) {       a -= MOD;     }     return a;   }   long long sub(long long a, long long b) {     a -= b;     if (a < 0) {       a += MOD;     }     return a;   }   long long mul(long long a, long long b) { return (a * b) % MOD; }   void add_self(long long& a, long long b) { a = add(a, b); }   void sub_self(long long& a, long long b) { a = sub(a, b); }   void mul_self(long long& a, long long b) { a = mul(a, b); }   int main() {     setIO();     long long t;     re(t);     for (int ii = (0); ii < (t); ++ii) {       long long N, W;       re(N, W);       vector<long long> v;       for (int i = (0); i < (N); ++i) {         long long a;         re(a);         v.push_back(a);       }       bool done = false;       for (int i = (0); i < ((int)v.size()); ++i) {         if (v[i] >= (W + 1) / 2 && v[i] <= W) {           ps(1);           ps(i + 1);           done = true;           break;         }       }       if (done) {         continue;       }       long long lind = -1;       long long cs = 0;       long long ignore = 0;       for (int i = (0); i < ((int)v.size()); ++i) {         if (v[i] > W) {           ignore++;           continue;         }         cs += v[i];         if (cs >= (W + 1) / 2 && cs <= W) {           lind = i;           break;         }       }       if (lind == -1) {         ps(-1);         continue;       }       ps(lind + 1 - ignore);       for (int i = (0); i < (lind + 1); ++i) {         if (v[i] > W) {           continue;         }         cout << i + 1 <<    ;       }       ps();     }     return 0;   }