There are n programmers that you want to split into several non-empty teams. The skill of the i-th programmer is a_i. You want to assemble the maximum number of teams from them. There is a restriction for each team: the number of programmers in the team multiplied by the minimum skill among all programmers in the team must be at least x.

Each programmer should belong to at most one team. Some programmers may be left without a team.

Calculate the maximum number of teams that you can assemble.

Input

The first line contains the integer t (1 ≤ t ≤ 1000) — the number of test cases.

The first line of each test case contains two integers n and x (1 ≤ n ≤ 10^5; 1 ≤ x ≤ 10^9) — the number of programmers and the restriction of team skill respectively.

The second line of each test case contains n integers a_1, a_2, ... , a_n (1 ≤ a_i ≤ 10^9), where a_i is the skill of the i-th programmer.

The sum of n over all inputs does not exceed 10^5.

Output

For each test case print one integer — the maximum number of teams that you can assemble. 

Example

Input


3
5 10
7 11 2 9 5
4 8
2 4 2 3
4 11
1 3 3 7


Output


2
1
0
import java.util.*;
import java.io.*;

public class Solution{
    static Vector<Integer> printDivisors(int n){
        Vector<Integer> v = new Vector<>(); 
        for (int i=1; i<=Math.sqrt(n); i++){
            if (n%i==0){
                if (n/i == i); // check if divisors are equal 
                    //System.out.printf("%d ", i); 
                else{ 
                     //System.out.printf("%d ", i);
                    v.add(n/i); 
                } 
            } 
        } 
       return v;
    } 
    public static void main(String[] args)throws IOException{
        FastReader in=new FastReader();
        PrintWriter wr=new PrintWriter(System.out);
        int t=in.nextInt(),tc=1;
        while(t-->0){
            int n=in.nextInt(),x=in.nextInt();
            int[] a=new int[n];
            for(int i=0;i<n;i++)a[i]=in.nextInt();
            Arrays.sort(a);
            int ans=0,pos=n,sum=0;
            for(int i=n-1;i>=0;i--){
                if(a[i]>=x){
                    sum+=1;
                    pos=i;
                }
            }
            if(pos==0){
                wr.write(sum+"\n");
                wr.flush();
                continue;
            }
            ArrayList<Integer> ar=new ArrayList<Integer>();
            for(int i=0;i<pos;i++)ar.add(a[i]);
            int pos1=n;
            if(pos==n)pos=n;
            else pos1=pos;
            for(int i=pos-1;i>=0;i--){
                int min=(int)Math.ceil((double)x/(double)ar.get(i));
                int ind=i+min-1;
                if(ind>=n || ind>=pos1)continue;
                sum+=1;
                pos1=i;
            }
            wr.write(sum+"\n");
            wr.flush();
        }
    }
    static boolean srch(int[] a,int x){
        int b=0,e=a.length-1,mid=-1;
        while(b<=e){
            mid=(b+e)/2;
            if(a[mid]==x)return true;
            else if(a[mid]>x)e=mid-1;
            else b=mid+1;
        }
        return false;
    }
    static int primeFactors(int n){
        while (n%2==0){ 
            System.out.print(2 + " "); 
            n /= 2; 
        } 
        int cnt=0;
        for (int i = 3; i <= Math.sqrt(n); i+= 2){
            while (n%i == 0){
                cnt+=1;
                n /= i; 
            } 
        }
        if (n > 2) 
            cnt+=1;
        return cnt;
    } 
    static double distance(double x1,double x2,double y1,double y2){
        return Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2));
    }
    static boolean[] sieve(int n){
        boolean[] ret=new boolean[n+1];
        Arrays.fill(ret,true);
        for(int i=0;i<=n;i++)ret[i]=true;
        for(int i=2;i*i<=n;i++){
            if(ret[i]==false)continue;
            for(int j=i*i;j<=n;j+=i){
                ret[j]=false;
            }
        }
        return ret;
    }
    static long calsum(long n){
        return (n*(n+1))/2;
    }
    static long calsum(long x,long y){
        y=x-y;
        y=(y*(y+1))/2;
        x=(x*(x+1))/2;
        return x-y;
    }
    static int bsrch(long[] sumdays,long x,int i){
        int b=0,e=i,mid=0;
        while(b<=e){
            mid=(b+e)/2;
            if(sumdays[i]-sumdays[mid+1]<=x && sumdays[i]-sumdays[mid]>x)return mid+1;
            else if(sumdays[i]-sumdays[mid]>x)b=mid+1;
            else e=mid-1;
        }
        return mid;
    }
    static boolean check(long[] a,long x,long k,long l){
        long e=x;
        int n=a.length;
        for(int i=0;i<n;i++){
            if(a[i]<e)e+=l;
            else if(a[i]==e)e-=k;
            else return false;
        }
        return true;
    }
    static long srch1(int h,int c,double temp){
        long b=1,e=10000000000000000l,mid=1;
        while(b<=e){
            mid=(b+e)/2;
            double t1=0.0,t2=0.0;
            if(mid%2==0){
                mid+=1;
                e+=1;
            }
            t1=(double)(((mid-1)/2)*(h+c) + h)/(double)mid;
            t2=(double)(((mid+2-1)/2)*(h+c) + h)/(double)(mid+2);
            if(t1<temp && t2>=temp)return mid;
            else if(t1<temp)b=mid+1;
            else e=mid-1;
        }
        return mid;
    }
    static long srch2(double temp,int h,int c){
        long b=1,e=10000000000000000l,mid=1;
        while(b<=e){
            mid=(b+e)/2;
            double t1=0.0,t2=0.0;
            if(mid%2==0){
                mid+=1;
                e+=1;
            }
            t1=(double)(((mid-1)/2)*(h+c) + h)/(double)mid;
            t2=(double)(((mid+2-1)/2)*(h+c) + h)/(double)(mid+2);
            if(t1<=temp && t2>=temp)return mid+2;
            else if(t1<temp)b=mid+1;
            else e=mid-1;
        }
        return mid;
    }
}
class SegTree{
    SegTree(){}
    HashSet<Integer>[] segment;
    void build(int i, int s, int e, int[] arr){
        if (s == e){ 
            segment[i].add(arr[s]); 
            return; 
        }
        build(2 * i, s, (s + e) / 2, arr); 
        build(1 + 2 * i, 1 + (s + e) / 2, e, arr);
        segment[i].addAll(segment[2 * i]); 
        segment[i].addAll(segment[2 * i + 1]); 
    }
    HashSet<Integer> query(int node, int l,  
                                int r, int a, int b){
        HashSet<Integer> left = new HashSet<>(); 
        HashSet<Integer> right = new HashSet<>(); 
        HashSet<Integer> result = new HashSet<>();
        if (b < l || a > r) 
            return result; 
        if (a <= l && r <= b) 
            return segment[node]; 
        left = query(2 * node, l, (l + r) / 2, a, b); 
        result.addAll(left); 
  
        right = query(1 + 2 * node, 1 + (l + r) / 2, r, a, b); 
        result.addAll(right); 
        return result; 
    } 
  
    // Initialize the segment tree 
    @SuppressWarnings("unchecked") 
    void init(int n){
  
        // Get the height of the segment tree 
        int h = (int) Math.ceil(Math.log(n) / Math.log(2)); 
        h = (int) (5 * Math.pow(2, h)) - 1; 
  
        // Initialize the segment tree 
        segment = new HashSet[h]; 
        for (int i = 0; i < h; i++) 
            segment[i] = new HashSet<>(); 
    } 
  
    // Function to get the result for the 
    // subarray from arr[l] to arr[r] 
    int getDistinct(int l, int r, int n){
  
        // Query for the range set 
        HashSet<Integer> ans = query(1, 0, n - 1, l, r); 
  
        return(ans.size()); 
    }
}
class FastReader{
    public static StringTokenizer st;
    public static BufferedReader in;
    public static PrintWriter pw;
    FastReader(){
        in = new BufferedReader(new InputStreamReader(System.in));
        pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
        st = new StringTokenizer("");
    }
    public static int nextInt() throws IOException {
        return Integer.parseInt(next());
    }
    public static long nextLong() throws IOException {
        return Long.parseLong(next());
    }
    public static double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }
    public static String next() throws IOException {
        while(!st.hasMoreElements() || st == null){
            st = new StringTokenizer(in.readLine());
        }
        return st.nextToken();
    }
}