#pragma GCC target("avx2") #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include using namespace std; void comp(int s,vector &a){ map mp; for(auto &nx : a){ mp[nx]++; } vector na; int low=0; while(true){ auto it=mp.lower_bound(low); if(it==mp.end()){break;} int i=(*it).first; if(i>s){break;} if(mp[i]>=3){ int pack=(mp[i]-1)/2; mp[i]-=2*pack; mp[2*i]+=pack; } for(int tr=0;tr> t; while(t--){ int n,s; cin >> n >> s; map bk; vector a(n); int g=0; for(auto &nx : a){ cin >> nx; if(nx>s){nx=0;} g=gcd(g,nx); } if(g==0){ cout << "0\n"; continue; } for(auto &nx : a){ nx/=g; } // cerr << "ok\n"; comp(s,a); // cerr << "ok\n"; n=a.size(); bitset<200005> bs; bs.set(0); for(int i=0;i(s/g)){ bk[a[i]]--; continue; } bs|=(bs<=0;i--){ if(bs[i]){ cout << i*g << "\n"; break; } } } return 0; }