#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
//英语 看博友好分析 抄博友程序 dfs+dp 巧妙 背
struct nod{
int id;
int num;
int p;
};
nod pro[6];
struct dz{
int sum[5];
int pr;
};
dz off[200];//
int dp[6][6][6][6][6];
map<int,int> mp;
int n,m;
int dfs(int a1,int a2, int a3, int a4, int a5)//背
{
//cout<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<" "<<a5<<endl;
if(dp[a1][a2][a3][a4][a5]!=-1)
{
return dp[a1][a2][a3][a4][a5];
}
dp[a1][a2][a3][a4][a5]=0x3f3f3f3f;
for(int i=0;i<n+m;i++)
{
if(a1>=off[i].sum[0] && a2>=off[i].sum[1] && a3>=off[i].sum[2] && a4>=off[i].sum[3] &&
a5>=off[i].sum[4])
{
dp[a1][a2][a3][a4][a5]=min(dp[a1][a2][a3][a4][a5],
off[i].pr+dfs(a1-off[i].sum[0], a2-off[i].sum[1], a3-off[i].sum[2], a4-off[i].sum[3],
a5-off[i].sum[4]));
}
}
return dp[a1][a2][a3][a4][a5];
}
int main()
{
while(cin>>n)
{
memset(dp,-1,sizeof(dp));
memset(off,0,sizeof(off));
mp.clear();
for(int i=0;i<n;i++)
{
cin>>pro[i].id>>pro[i].num>>pro[i].p;
mp[pro[i].id]=i;
off[i].sum[i]=1;
off[i].pr=pro[i].p;
}
if(n<5)
{
for(int i=n;i<5;i++)
{
pro[i].num=0;
pro[i].p=0;
}
}
cin>>m;
for(int i=n;i<n+m;i++)
{
int mm;
cin>>mm;
for(int j=0;j<mm;j++)//
{
int id,a;
cin>>id>>a;
off[i].sum[mp[id]]+=a;
}
cin>>off[i].pr;
}
dp[0][0][0][0][0]=0;
if(m==0)
{
int t=0;
for(int i=0;i<5;i++)
{
t=t+pro[i].num*pro[i].p;
}
cout<<t<<endl;
}else
{
cout<<dfs(pro[0].num, pro[1].num, pro[2].num, pro[3].num, pro[4].num)<<endl;
}
}
return 0;
}