#include <stdio.h>
#include <malloc.h>

int main()
{
  long i,j,d,p;
  int n,st;
  int  poc[1005],duz[1005],z[1005];
  int *mat[1005];
  int x;
  long *res[1005];
  long max=0;
  freopen("vasari.in","r",stdin);
  freopen("vasari.out","w",stdout);
  scanf("%d%d",&n,&st);
  st--;
  for(i=0;i<n;i++)
  {
    scanf("%d%d%d",&poc[i],&duz[i],&z[i]);
    if(poc[i]+duz[i]>max)
      max=poc[i]+duz[i];
    mat[i]=(int*)malloc(1005* sizeof(int));
    res[i]=(long*)malloc(505*sizeof(long));
    for(j=0;j<n;j++)
    {
      scanf("%d",&mat[i][j]);
    }
  }
  for(i=0;i<n;i++)
  {
    res[i][0]=-1;
  }
  res[st][0]=0;
  for(d=1;d<=max;d++)
  {
    for(i=0;i<n;i++)
    {
      res[i][d]=res[i][d-1];
      if(res[i][d]>=0 && d>=poc[i] && d<poc[i]+duz[i])
	res[i][d]+=z[i];
      for(j=0;j<n;j++)
      {
	if(i==j) continue;
	p=d-mat[j][i];
	if(p<0 || res[j][p]==-1) continue;
	if(res[j][p]>res[i][d])
	  res[i][d]=res[j][p];
      }
    }
  }

  d=0;
  for(i=0;i<n;i++)
  {
    if(res[i][max]>d)
      d=res[i][max];
  }
  printf("%d\n",d);

  return 0;
}
