#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<vector>
#include<sstream>
#include<algorithm>
#include<bitset>
#include<stack>
#include<map>
#include<set>
#include<ctime>
#include<cstdlib>
#define rep(i,n) for(int i=0;(i)<(n);i++)
#define rep1(i,n) for(int i=1;(i)<=(n);i++)
#define mst(a,b) memset(a,b,sizeof(a))
#define scd(a) scanf("%lld",&a)
#define scdd(a,b) scanf("%lld%lld",&a,&b)
#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define dbg(a) cout<<"* "<< #a <<" : "<<a<<endl
#define fr first
#define se second
#define ls x<<1
#define rs x<<1|1
#define ll long long
#define LL long long
#define ull unsigned long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pdd pair<double,double>
#define lowbit(x) x&(-x)
#define ac cout<<ans<<endl
using namespace std;
const double pi=acos(-1.0);
const double eps=1e-7;
const ull hashp=131;
const ll INF=0x3f3f3f3f3f3f3f3fll;
const int inf=0x3f3f3f3f;
const int mod=998244353; 
const int maxn=2e5+100;
int arr[maxn],b[maxn];
void solve(){
	int _=1;scd(_);
	//init();
	for(;_--;){
		ll n,c;scdd(n,c);
		rep1(i,n)scd(arr[i]);
		rep1(i,n-1)scd(b[i]);
		ll now=0,d=0,ans=INF;
		rep1(i,n){
			ans=min(ans,max(0ll,(c-now+arr[i]-1)/arr[i])+d);
			ll rec=max(0ll,(b[i]-now+arr[i]-1)/arr[i]);
			d+=rec+1,now=now+rec*arr[i]-b[i];
		}ac;
	}
}
int main(){
	//IOS;
	
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;;                                             ;;
	;;         ;;            ;;;;;;;;;       ;;    ;;
	;;        ;; ;;        ;;                ;;    ;;
	;;       ;;   ;;       ;;                ;;    ;;
	;;      ;;;;;;;;;      ;;                ;;    ;;
	;;     ;;       ;;     ;;                      ;;
    ;;    ;;         ;;      ;;;;;;;;;       ;;    ;;
    ;;                                             ;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    solve();
    return 0;
}