- # Time Complexity O(wlogw) 
-   
- from bisect import * 
-   
- def getRange(lval, rval, a): # returns (leftmost occurrence of lval, rightmost occurrence of rval) 
- 	# 'Find leftmost item greater than or equal to x' 
- 	i = bisect_left(a, lval) 
- 	# 'Find rightmost value less than or equal to x' 
- 	j = bisect_right(a, rval)-1 
- 	return (i, j) 
-   
-   
- def calMod(val, l, r, a): # calculate abs(a[l]-val) + abs(a[l+1]-val) ... abs(a[r-1]-val) + abs(a[r]-val) in log(w) 
- 	if a[r] <= val: 
- 		return abs(getSum(a, l, r) - val*(r-l+1)) 
- 	elif a[l] >= val : 
- 		return abs(getSum(a, l, r) - val*(r-l+1)) 
- 	else: 
- 		# 'Find rightmost value less than or equal to x' 
- 		j = bisect_right(a, val)-1 
- 		# return calMod(val, l, j, a) + calMod(val, j+1, r, a) 
- 		return abs(getSum(a, l, j) - val*(j-l+1)) + abs(getSum(a, j+1, r) - val*(r-j)) 
-   
-   
-   
- def getSum(a, l, r): # calculate a[l] + a[l+1] ... a[r-1] + a[r] in O(1) 
- 	return total - (left_sum[l-1] if l else 0) - (right_sum[r+1] if r+1 < len(right_sum) else 0) 
-   
- t = int(input()) 
-   
- for ti in range(t): 
- 	w, n = [int(var) for var in input().split()] 
- 	a = [int(var) for var in input().split()] 
-   
- 	a.sort();ans = float("inf") 
-   
- 	total = sum(a) 
-   
- 	left_sum, right_sum = a[:], a[:] 
-   
- 	for i in range(1, w): 
- 		left_sum[i] += left_sum[i-1] 
-   
- 	for i in reversed(range(w-1)): 
- 		right_sum[i] += right_sum[i+1] 
-   
- 	for v in a: 
- 		lval, rval = max(1, (2*v - n)/2), min(n, (2*v + n)/2) 
- 		l,r = getRange(lval, rval, a) 
- 		moves = calMod(v, l, r, a) 
- 		if l :  
- 			moves += abs(calMod(v, 0, l-1, a) - l*n) 
- 		if w-(r+1): 
- 			moves += abs(calMod(v, r+1, w-1, a) - (w-r-1)*n) 
- 		ans = min(ans, moves) 
-   
- 	print("Case #%d: %d"%(ti+1, ans)) 
-   
				IyBUaW1lIENvbXBsZXhpdHkgTyh3bG9ndykKCmZyb20gYmlzZWN0IGltcG9ydCAqCgpkZWYgZ2V0UmFuZ2UobHZhbCwgcnZhbCwgYSk6ICMgcmV0dXJucyAobGVmdG1vc3Qgb2NjdXJyZW5jZSBvZiBsdmFsLCByaWdodG1vc3Qgb2NjdXJyZW5jZSBvZiBydmFsKQoJIyAnRmluZCBsZWZ0bW9zdCBpdGVtIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB4JwoJaSA9IGJpc2VjdF9sZWZ0KGEsIGx2YWwpCgkjICdGaW5kIHJpZ2h0bW9zdCB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8geCcKCWogPSBiaXNlY3RfcmlnaHQoYSwgcnZhbCktMQoJcmV0dXJuIChpLCBqKQoKCmRlZiBjYWxNb2QodmFsLCBsLCByLCBhKTogIyBjYWxjdWxhdGUgYWJzKGFbbF0tdmFsKSArIGFicyhhW2wrMV0tdmFsKSAuLi4gYWJzKGFbci0xXS12YWwpICsgYWJzKGFbcl0tdmFsKSBpbiBsb2codykKCWlmIGFbcl0gPD0gdmFsOgoJCXJldHVybiBhYnMoZ2V0U3VtKGEsIGwsIHIpIC0gdmFsKihyLWwrMSkpCgllbGlmIGFbbF0gPj0gdmFsIDoKCQlyZXR1cm4gYWJzKGdldFN1bShhLCBsLCByKSAtIHZhbCooci1sKzEpKQoJZWxzZToKCQkjICdGaW5kIHJpZ2h0bW9zdCB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8geCcKCQlqID0gYmlzZWN0X3JpZ2h0KGEsIHZhbCktMQoJCSMgcmV0dXJuIGNhbE1vZCh2YWwsIGwsIGosIGEpICsgY2FsTW9kKHZhbCwgaisxLCByLCBhKQoJCXJldHVybiBhYnMoZ2V0U3VtKGEsIGwsIGopIC0gdmFsKihqLWwrMSkpICsgYWJzKGdldFN1bShhLCBqKzEsIHIpIC0gdmFsKihyLWopKQoKCgpkZWYgZ2V0U3VtKGEsIGwsIHIpOiAjIGNhbGN1bGF0ZSBhW2xdICsgYVtsKzFdIC4uLiBhW3ItMV0gKyBhW3JdIGluIE8oMSkKCXJldHVybiB0b3RhbCAtIChsZWZ0X3N1bVtsLTFdIGlmIGwgZWxzZSAwKSAtIChyaWdodF9zdW1bcisxXSBpZiByKzEgPCBsZW4ocmlnaHRfc3VtKSBlbHNlIDApCgp0ID0gaW50KGlucHV0KCkpCgpmb3IgdGkgaW4gcmFuZ2UodCk6Cgl3LCBuID0gW2ludCh2YXIpIGZvciB2YXIgaW4gaW5wdXQoKS5zcGxpdCgpXQoJYSA9IFtpbnQodmFyKSBmb3IgdmFyIGluIGlucHV0KCkuc3BsaXQoKV0KCglhLnNvcnQoKTthbnMgPSBmbG9hdCgiaW5mIikKCgl0b3RhbCA9IHN1bShhKQoKCWxlZnRfc3VtLCByaWdodF9zdW0gPSBhWzpdLCBhWzpdCgoJZm9yIGkgaW4gcmFuZ2UoMSwgdyk6CgkJbGVmdF9zdW1baV0gKz0gbGVmdF9zdW1baS0xXQoKCWZvciBpIGluIHJldmVyc2VkKHJhbmdlKHctMSkpOgoJCXJpZ2h0X3N1bVtpXSArPSByaWdodF9zdW1baSsxXQoKCWZvciB2IGluIGE6CgkJbHZhbCwgcnZhbCA9IG1heCgxLCAoMip2IC0gbikvMiksIG1pbihuLCAoMip2ICsgbikvMikKCQlsLHIgPSBnZXRSYW5nZShsdmFsLCBydmFsLCBhKQoJCW1vdmVzID0gY2FsTW9kKHYsIGwsIHIsIGEpCgkJaWYgbCA6IAoJCQltb3ZlcyArPSBhYnMoY2FsTW9kKHYsIDAsIGwtMSwgYSkgLSBsKm4pCgkJaWYgdy0ocisxKToKCQkJbW92ZXMgKz0gYWJzKGNhbE1vZCh2LCByKzEsIHctMSwgYSkgLSAody1yLTEpKm4pCgkJYW5zID0gbWluKGFucywgbW92ZXMpCgoJcHJpbnQoIkNhc2UgIyVkOiAlZCIlKHRpKzEsIGFucykpCg==