package LuoGu;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class p7948 {
//超时了 不用队列 用数组看看时间是否会超
//先做好输入 操作 以及输出预留的数组 为T组数据
//准备用队列完成 删数操作用remove
public static void main(String[] args) throws IOException {
StreamTokenizer ins = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter up = new PrintWriter(new OutputStreamWriter(System.out));
ins.nextToken();
int T =(int)ins.nval , k = 0;//数据组数
int[][] result = new int[T][10001];//结果 用空格隔开
while(k < T){
ins.nextToken();
int tn,n = (int)ins.nval;
ins.nextToken();
int q = (int)ins.nval;//n为数据 q为询问的数据量
int[] list = new int[n];
tn = 0;
while(tn < n) {//输入n个数
ins.nextToken();
list[tn] = (int)ins.nval;
tn ++;
}
Arrays.sort(list);//对list进行 排序 不影响结果
tn = 0;
Map<Integer,Integer> hash = new HashMap<Integer,Integer>();//这对应的是改该k值 的结果
int[] list_q = new int[q];
int[] listq = new int[q];
for(int i = 0;i < q;i++) {
ins.nextToken();
list_q[i] = (int)ins.nval;
listq[i] = list_q[i];
}
Arrays.sort(list_q);//排序
//从小到大开始 想像成一个个添加 从左往右走 一直走到不能走为止
result[k][0] = q;//每行第一个数存储该行的长度
double sum1 = list[n - 1];//设sum1的初值为 list的最大值 最少长度为1
int count = 1;
while(tn < q) {
for(int i = n - count - 1;i >= 0;i --) {
//判断该数是否可以被添加进当前序列 如果可以则向前添加
if(list[i] != 0 && (sum1 + list[i]) / (count + 1) - list_q[tn] > list[i])break;
sum1 += list[i];
count ++;
}
hash.put(list_q[tn],count);//将该ki 对应的count数量添加进hash
tn++;
}
tn = 1;
while(tn <= q) {
result[k][tn] = hash.get(listq[tn - 1]);
tn ++;
}
k++;
}
for(int i = 0;i < T;i++) {//输出结果
for(int j = 1;j <= result[i][0];j++) {
up.print(result[i][j] + " ");
}
up.println();
}
up.flush();
up.close();
}
}