#include <iostream>#include <string>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>#define inf 0x7fffffff#define UL long long int #define CL(a,b) memset(a,b,sizeof(a))#define MIN(a,b) ((a)<(b)?(a):(b))#define MAX(a,b) ((a)>(b)?(a):(b))#define N 1300#define M 110#define S (1<<8)using namespace std;int dp[M][N];int f[S][10],ma[10][10];typedef struct data{int x,y,val;}node;node floo[M][10],stair[M];int cost[M][N];int dis(data a,data b){return (int)(fabs(a.x-b.x+0.0)+fabs(a.y-b.y+0.0));}void getval(int pos,int m){int i,j,k;int s=(1<<(m+2));for(i=0;i<s;i++)for(j=0;j<=m+1;j++)f[i][j]=inf;f[1][0]=0;for(i=0;i<s;i++)for(j=0;j<=(m+1);j++)if(i&(1<<j)&&f[i][j]!=inf)for(k=0;k<=(m+1);k++)if(!(i&(1<<k))&&ma[k][j]!=inf)f[i|(1<<k)][k]=MIN(f[i|(1<<k)][k],f[i][j]+ma[k][j]);for(i=0;i<s;i++){if(f[i][m+1]!=inf&&(i&1)&&(i&(1<<(m+1)))){int sum=0;for(j=1;j<m+1;j++)if(i&(1<<j))sum+=floo[pos][j].val;cost[pos][f[i][m+1]]=MAX(cost[pos][f[i][m+1]],sum);}}}int Time[M];struct dat{int T,val;};vector<dat >g[M];void solve(int n){int i,j,k;dat temp;for(i=0;i<n;i++){g[i].clear();for(j=0;j<N;j++){if(cost[i][j]!=-1){temp.T=j;temp.val=cost[i][j];g[i].push_back(temp);}dp[i][j]=-1;}}vector<dat>::iterator it;for(it=g[0].begin();it!=g[0].end();it++){temp=*it;if(temp.T<=Time[0])dp[0][temp.T]=temp.val;}for(i=1;i<n;i++){for(j=0;j<=Time[i-1];j++){if(dp[i-1][j]==-1) continue;for(it=g[i].begin();it!=g[i].end();it++){temp=*it;if(temp.T+j>Time[i])continue;if(dp[i][j+temp.T]==-1)dp[i][j+temp.T]=dp[i-1][j]+temp.val;elsedp[i][j+temp.T]=MAX(dp[i][j+temp.T],dp[i-1][j]+temp.val);}}}}int main(){int T;scanf("%d",&T);while(T--){int n,m;int i,j,k;int x,y;CL(cost,-1);scanf("%d",&n);data temp;scanf("%d%d",&temp.x,&temp.y);for(i=0;i<n;i++)scanf("%d%d",&stair[i].x,&stair[i].y);for(i=0;i<n;i++){scanf("%d",&m);for(j=1;j<=m;j++)scanf("%d%d%d",&floo[i][j].x,&floo[i][j].y,&floo[i][j].val);if(i!=0){temp=stair[i-1];}for(j=0;j<=m+1;j++)for(k=0;k<=m+1;k++)ma[j][k]=inf;for(j=1;j<=m;j++)ma[0][j]=ma[j][0]=dis(temp,floo[i][j]);ma[0][m+1]=ma[m+1][0]=dis(temp,stair[i]);for(j=1;j<=m;j++)for(k=j+1;k<=m;k++)ma[j][k]=ma[k][j]=dis(floo[i][j],floo[i][k]);for(j=1;j<=m;j++)ma[j][m+1]=ma[m+1][j]=dis(stair[i],floo[i][j]);getval(i,m);}for(i=0;i<n;i++)scanf("%d",&Time[i]);solve(n);int ans=-1;for(i=0;i<=Time[n-1];i++)ans=MAX(ans,dp[n-1][i]);if(ans==-1)printf("I'm doomed, though I fought bravelyn");elseprintf("%dn",ans);}}


