#include<bits/stdc++.h>
using namespace std;
#define F(i,k,n) for (int i=k;i<=n;i++)
typedef long long ll;
const int N=17;
int dp[1<<N];
int wei[1<<N];
int W,n,m,a,tot;
int w[N];
bool pan[N];
int zw[N];
signed main(){
cin>>n>>W;
F(i,0,n-1) cin>>w[i];
memset(dp,0x3f3f3f3f,sizeof dp);
cin>>m;
while (m--){tot++;
int sum=0;
while (1){
cin>>a;a--;
sum+=w[a];
pan[a]=1;
if (getchar()=='\n') break;
}
zw[tot-1]=sum;
}
F(i,0,n-1){
if (!pan[i]) tot++,zw[tot-1]=w[i];
}
n=tot;
F(s,1,(1<<n)-1){
F(i,0,n-1){
if ((s>>i)&1){
wei[s]+=zw[i];
}
}
}
dp[0]=0;
F(s,1,(1<<n)-1){
for (int j=s;j>=0;j=(j-1)&s){
if (wei[s-j]<=W) dp[s]=min(dp[s],dp[j]+1);
if (!j) break;
}
}
cout<<dp[(1<<n)-1];
return 0;
}