#include <cstdio>

using namespace std;
const int MAX = 1001;

int s[MAX] , a[MAX] ; 
int n , m , l , r , inc , sf ; 

void construire(int x , int y , int z , int t , int s )
{
  int l , r , inc , sf ;
  l=((x+s)%m)+1;
  r=((y+s)%m)+1;
  inc=((z+s)%m)+1;
  sf=((t+s)%m)+1;
}
struct alcatuire
{
    int p , x , y , v , z , t ;
    
}oras[MAX] ;

int act[MAX][MAX];

int main()
{
   freopen ("ants.in" , "r" , stdin ) ;
   freopen ("ants.out" , "w" , stdout ) ;
   scanf ("%d%d\n" , &n , &m ) ; 
   for ( int i = 1 ; i < n ; ++i )
      scanf ("%d" , &a[i] ) ;
   scanf ("%d\n" , &a[n] ) ;
   for ( int i = 1 ; i <= n-1 ; ++i )
       scanf ("%d%d%d%d%d%d\n" , &oras[i].p , &oras[i].x , &oras[i].y , &oras[i].v , &oras[i].z , &oras[i].t ) ;
   construire(oras[1].x , oras[1].y , oras[1].z , oras[1].t , 0 ); 
   int i = 2 ;
   //int j = 2 ;
   int P = 1 ;
   while ( i <= n )
   {
        for ( int k = l ; k <= r ; ++k )
            act[P+1][k]=act[P][k]+oras[i].v ;
        for ( int w = inc ; w <= sf ; ++w )
            s[i] = s[i] + act[P][w] ; 
        printf ("%d\n" , s[i] ) ;
        construire(oras[i].x , oras[i].y , oras[i].z , oras[i].t , s[i] ) ; 
        ++i;
        //++j;
        ++P;
   }
   return 0;
}