#include<stdio.h>
#include<stdlib.h>


int main()
{
	int n,i,j,rv/* radno vreme */, lastDel=6/* zadnja dostava */,id,min;
	int *ispOd, *ispDo, *vrem;

	int *opt;
	int *optDost;
	// Ucitavanje
	scanf("%d\n", &n);

	opt = (int *)malloc( 25*sizeof(int));
	ispOd = (int *)malloc( (n+1)*sizeof(int));
	ispDo = (int *)malloc( (n+1)*sizeof(int));
	vrem = (int *)malloc( (n+1)*sizeof(int));
	optDost = (int *)malloc( (n+1)*sizeof(int));

	for(i=0; i<n; i++)
		scanf("%d %d %d", &ispOd[i], &ispDo[i], &vrem[i]);

	for(i=8; i<=22; i++)
	{
		opt[i] = 0;
	}

	for(i=0; i<n; i++) optDost[i] = 0;

	for(i=8; i<=22; i++) // razlazem na intervale
	{
		opt[i] = opt[i-1];
		//printf("Pocetni optimum za prolazak %d : %d\n", i, opt[i]);
		min = 9999;
		id = -1;
		for(j=0; j<n; j++)
		{
			if(optDost[j] == 0)
			{
				//printf("Parameters: i: %d lastDel: %d vrem[j]: %d ispOd[j]: %d ispDo[j]: %d\n",i,lastDel, vrem[j], ispOd[j], ispDo[j]);
				/* 
					- ako moze mu dostavi u to vreme?
					- Moze ako je bio u skladistu pre vise od vrem[i]
					- Ako nije, onda ne moze da stigne da mu u taj cas dostavi
				*/
				if(i-lastDel >= vrem[j] && i+vrem[j] <= 24 && ispOd[j] <= i && ispDo[j] >= i)
				{
					//printf("Proslo za ove parametre.\n");
					if(min > vrem[j])
					{
						//printf("Proslo i za min.\n");
						min = vrem[j];
						id = j;
						//printf("Novi min: %d Novi id %d\n",min,id);
					}
				}
			}
		}

		if(id != -1)
		{
			lastDel = i+vrem[id];
			optDost[id] = 1;
			opt[i]++;
			//printf("Last Delivery : %d ID : %d\nDelivered To: %d %d %d\n",lastDel, id,ispOd[id], ispDo[id], vrem[id]);
		}
		//printf("Zavrsni optimum za prolazak %d : %d\n", i, opt[i]);
	}

	printf("%d\n", opt[22]);
	/*for(i=0; i<n; i++)
		printf("%d %d %d\n", ispOd[i], ispDo[i], vrem[i]);*/
	
	return 0;
}
