#include using namespace std; typedef long long ll; const ll MX = (1<<20); ll arr[MX] , vi[MX]; ll getsum(ll L , ll R){ L--; R *= (R+1); R/=2; L *= (L+1); L/=2; return R - L; } int main(){ ll T; cin>>T; while(T--){ ll total , current , maxy , dif; scanf("%lld %lld %lld %lld",&total,¤t,&maxy,&dif); for(ll j = 1 ; j <= current ; j++) scanf("%lld",&arr[j]); sort(arr+1 , arr+1+current); set < ll > sol; ll rem = total - current; ll last = 0 , fakss = 0; for(ll j = 1 ; j <= current ; j++){ if(j == 1 || arr[j] - last > dif){ if(j != current && arr[j + 1] - arr[j] <= dif){ sol.insert(arr[j]); sol.insert(arr[j + 1]); last = arr[j + 1]; j++; continue; } else{ if(rem == 0){ fakss = 1; break; } --rem; sol.insert(arr[j]); if(arr[j] + dif > maxy){ if(maxy == arr[j]) sol.insert(arr[j] - 1); else sol.insert(maxy); break; } else{ sol.insert(arr[j] + dif); last = arr[j] + dif; continue; } } } else{ sol.insert(arr[j]); last = arr[j]; } } long long ans = 0; if(sol.empty()) fakss = 1; else{ long long st = maxy; if(rem == 1) st = min(st , *sol.rbegin() + dif); vector < ll > sorted (sol.begin() , sol.end()); reverse(sorted.begin() , sorted.end()); for(auto V : sorted){ ans += V; if(rem == 0 || st < 1) continue; if(st - V <= rem){ rem -= (st - V); ans += getsum(V + 1 , st); st = V - 1; } else{ ans += getsum(st - rem + 1 , st); rem = 0; } } if(st >= rem && rem > 0){ ans += getsum(st - rem + 1 , st); rem = 0; } } if(rem > 0) fakss = 1; if(fakss) puts("-1"); else{ cout<