#include <iostream>#include <string>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>#include "queue"#define inf 1000000000#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 1000using namespace std;int a[N],b[N],c[N];int ma[N][N];int n,d;int min(int a,int b){return a<b?a:b;}void floyd(int n){ int i,j,k; for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) { if(ma[i][k]==inf||ma[k][j]==inf) continue; ma[i][j]=min(ma[i][j],ma[i][k]+ma[k][j]); }}int ans;int dp[1010][1010];int max(int a,int b){return a>b?a:b;}int main(){ int i,j,k; while(scanf("%d%d",&n,&d)!=EOF) { for(i=0;i<=n;i++) for(j=0;j<=n;j++) ma[i][j]=inf; for(i=0;i<n;i++) { scanf("%d%d%d",&a[i],&b[i],&c[i]); int m,x,y; scanf("%d",&m); for(j=0;j<m;j++) { scanf("%d%d",&x,&y); ma[i][x]=y; } } floyd(n);memset(dp,-1,sizeof(dp));dp[0][0]=0; for (i=0;i<d;i++) { for(j=0;j<n;j++) { if(dp[i][j]==-1) continue; for (k=0;k<n;k++) { if(ma[j][k]==inf) continue; if(dp[i][j]+a[j]>=ma[j][k]) dp[i+1][k]=max(dp[i+1][k],dp[i][j]+a[j]-ma[j][k]); if(dp[i][j]+a[j]+b[j]>=ma[j][k]) dp[i+2][k]=max(dp[i+2][k],dp[i][j]+a[j]+b[j]-ma[j][k]); if(dp[i][j]+a[j]+b[j]>=ma[j][k]) dp[i+3][k]=max(dp[i+3][k],dp[i][j]+a[j]+b[j]-ma[j][k]+c[j]); else if(c[j]!=0) { int t=ma[j][k]-(dp[i][j]+a[j]+b[j]); if(t%c[j]==0) t/=c[j]; else t=t/c[j]+1; if(i+t+2<d) dp[i+t+2][k]=max(dp[i+t+2][k],dp[i][j]+a[j]+b[j]-ma[j][k]+c[j]*t); } } } }ans=0;for(j=0;j<d;j++){for (i=0;i<n;i++){if(dp[j][i]==-1) continue;int s=0;if(d-1-j>0) s+=a[i];if(d-1-j>1) {s+=b[i];s+=(d-3-j)*c[i];} if(dp[j][i]+s>ans) ans=dp[j][i]+s;}} printf("%dn",ans); }return 0;}


