# include <bits/stdc++.h>
using namespace std;

const int N = 200005;
struct Node{
	double a;
	double b;
	bool operator < (const Node & p) const{
		if(a / b != p.a / p.b)
			return (a / b) > (p.a / p.b);
		else{
			return b < p.b;
		}
	}
}node[N];

int main(){
	int t;
	cin >> t;
	
	while(t--){
		int n, k;
		cin >> n >> k;
		
		for(int i=1; i<=n; i++){
			scanf("%lf", &node[i].a);
		}
		
		for(int i=1; i<=n; i++){
			scanf("%lf", &node[i].b);
		}
		
		sort(node + 1, node + 1 + n);
		
		/*
		for(int i=1; i<=n; i++){
			cout << node[i].a << ' ';
		}
		cout << endl;
		for(int i=1; i<=n; i++){
			cout << node[i].b << ' ';
		}
		cout << endl;
		*/
		
		int ans = 0;
		int t = 0;
		int l1 = 0;
		int l2 = 0;
		int i=1;
		int flag = 0;
		for(; i<=n; i++){
			t += node[i].a;
			ans += node[i].b;
			if(node[i].b == 1)
				l1 = node[i].a;
			else{
				l2 = node[i].a;
			}
			if(t >= k){
				if(node[i].b == 2){
					flag = 1;
				}
				break;
			}
		}
		
		if(flag == 1){
		for(;i <=n; i++){
			if(node[i].b == 1 && t - l2 + node[i].a >= k){
				l1 = -1;
				break;
			}
			else if(node[i].b == 1){
				break;
			}
		}
		}
		
		//cout << ans << endl;
		//cout << "l1=" << l1 << ' '<< "t=" << t << endl;
		if(t >= k)
			if(l1 <= t - k && l1 != 0){
				cout << ans - 1 << endl;
			}
			else{
				cout << ans << endl;
			}
		else{
			cout << -1 << endl;
		}
	}
	
	
	return 0;
}