#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define int long long
#define oset tree < pair<int, int> , null_type , less<pair<int, int>> , rb_tree_tag , tree_order_statistics_node_update >
using namespace std;
signed main(){
//Pain has a strength of Z
//There are N soldiers
//The power of the ith solider is A(i)
//So when the ith soldier attacks pain
//Z = Z - A(i);
//A(i) = A(i)/2;
//Pain is defeated when his strength becomes <= 0
//Dp, greedy
//DP[Z] -> won't pass
//Greedy?
//Find an optimal approach to defeat pain
//The optimal approach would be that the soldier with max power attacks pain
//His power becomes halved
//The solider with the new maximum power attacks Pain
//This process is repeated until all soldiers have strength 0 (soliders have lost) or Pain has strength 0 (soldiers have won)
//How would we implement this?
//We need a data structures where we can:
//Find the maximum element in O(1) or O(LogN) -> Priority queue can do
//Remove the maximum element in O(1) or O(LogN) -> Priority queue can do
//Insert a new element in O(1) or O(LogN) -> Priority queue can do this
//Can store duplicate elements -> Priority queue can do this
//Priority queue?
int t;
cin>>t;
while(t--){
//N -> number of soldiers
//Z -> the strength of Pain
int n, z;
cin>>n>>z;
int a[n]; //A -> the power of soldiers
for(int i = 0;i<n;i++) cin>>a[i];
int ans = 0; //The answer
priority_queue<int> pq;
for(int i = 0;i<n;i++) pq.push(a[i]); //inserting powers into the priority queue
//Max strength of any soldier is 0
while(z>0 && pq.top()>0){
int attack = pq.top(); //This is the strength of the attack
z = z - attack;
pq.pop(); //We have used this attack power, we can't use it again
pq.push((attack/2));
ans++;
}
if(z>0) cout<<"Evacuate"<<endl; //pain was not defeated
else cout<<ans<<endl;
}
}
//acdabcd