#include<bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define eps 1e-2
#define gcd __gcd
#define pb push_back
#define PI acos(-1.0)
#define lowbit(x) (x)&(-x)
#define bug printf("!!!!!\n");
#define mem(x,y) memset(x,y,sizeof(x))
typedef long long LL;
typedef long double LD;
typedef pair<int,int> pii;
typedef unsigned long long uLL;
#define int long long
const int maxn = 3e5+2;
const int INF = 1<<30;
const int mod = 1e9+7;
int n,h,t[maxn],len[maxn];
int d[20][maxn];
int sum=0,dp1[maxn],dp2[maxn];
bool check(int x){
for(int i=0;i<(1<<n);i++) dp2[i]=0;
for(int i=0;i<(1<<n);i++){
for(int j=1;j<=n;j++){
int k=1<<(j-1);
if((i&k)||dp1[i]>x) continue;
if(len[j]+dp1[i]>x){
dp2[i|k]=max(dp2[i|k],dp2[i]+d[j][x-dp1[i]]);
}else{
dp2[i|k]=max(dp2[i|k],dp2[i]+d[j][len[j]]);
}
if(dp2[i|k]>=h) return 1;
}
}
return 0;
}
void solve(){
sum=0;
scanf("%lld%lld",&n,&h);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&t[i],&len[i]);
for(int j=1;j<=len[i];j++){
scanf("%lld",&d[i][j]);
d[i][j]+=d[i][j-1];
}
sum+=d[i][len[i]];
}
if(sum<h){cout<<-1<<endl;return;}
for(int i=0;i<(1<<n);i++){
dp1[i]=0;
for(int j=1;j<=n;j++){
int k=1<<(j-1);
if(i&k) dp1[i]+=t[j];
}
}
int l=1,r=3e6+10;
while(l<r){
int mid=(l+r)>>1;
if(check(mid)){
r=mid;
}else l=mid+1;
}
if(check(l)) cout<<l-1<<endl;
else cout<<-1<<endl;
return;
}
int32_t main()
{
int t = 1;
scanf("%lld",&t);
while(t--){
solve();
}
return 0;
}