#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define MAX_NUM_PC			(1000)
#define	MAX_NUM_STUDENT		(10000)
#define	MAX_NUM_RECORD		(1000)
#define START_MINUTES		(540)
#define END_MINUTES			(1260)
#define RECORD_TIME			((END_MINUTES) - (START_MINUTES))
#define TRUE				(1)
#define FALSE				(0)

#define	S4	int
#define	U4	unsigned int
#define	U1	unsigned char

typedef struct st_record
{
	S4 s4_time;
	S4 s4_PCNum;
	S4 s4_studentNum;
	U1 u1_isLogin;
}ST_RECORD;

S4 main()
{
	S4 s4_t_numPC;										/* PC数 */
	S4 s4_t_numStudent;									/* 学生数 */
	S4 s4_t_numRecord;									/* 利用記録の件数 */
	static ST_RECORD st_tp_record[MAX_NUM_RECORD];				/* 利用記録 */
	S4 s4_t_time;										/* 解析中の時刻 */
	static S4 s4_tp_numLoginPC[MAX_NUM_STUDENT];				/* 学生ごとのログイン数 */
	static U1 u1_tp_isLogin[RECORD_TIME][MAX_NUM_STUDENT];		/* ある時刻における学生ごとの利用状況 [0][m]に、開始時刻における学生mのログイン有無を記録する*/

	U1 u1_t_delimiter;									/* scanfの改行を捨てるための変数 */
	S4 s4_t_ir;											/* 利用記録のインデックス */
	S4 s4_t_im;											/* 学生ごとのログイン数のインデックス */
	S4 s4_t_iq;											/* 質問のインデックス */

	S4 s4_t_numQuestion;								/* 質問数 */
	S4 s4_t_startTime;									/* 開始時刻 */
	S4 s4_t_endTime;									/* 終了時刻 */
	S4 s4_t_studentNum;									/* 学生の番号 */
	S4 s4_t_utilizationTime;							/* 利用時間 */

	while (1)
	{
		/* 初期化 */
		for (s4_t_im = (S4)0; s4_t_im < (S4)MAX_NUM_STUDENT; s4_t_im++)
		{
			s4_tp_numLoginPC[s4_t_im] = (S4)0;
		}

		/* PC数、学生数の取得 */
		(void)scanf("%d %d%c", &s4_t_numPC, &s4_t_numStudent, &u1_t_delimiter);
		/* 0 0 が入力されたら終了 */
		if ((s4_t_numPC == 0) &&
		    (s4_t_numStudent == 0))
		{
			break;
		}

		/* 利用件数の取得 */
		(void)scanf("%d%c", &s4_t_numRecord, &u1_t_delimiter);

		/* 利用記録の取得 */
		for (s4_t_ir = (S4)0; s4_t_ir < s4_t_numRecord; s4_t_ir++)
		{
			(void)scanf("%d %d %d %d%c", &st_tp_record[s4_t_ir].s4_time, &st_tp_record[s4_t_ir].s4_PCNum, &st_tp_record[s4_t_ir].s4_studentNum, &st_tp_record[s4_t_ir].u1_isLogin, &u1_t_delimiter);
		}

		/* 利用記録の解析 */
		s4_t_time = (S4)START_MINUTES;
		s4_t_ir = (S4)0;
		while ((s4_t_time < (S4)END_MINUTES) &&
			(s4_t_ir < s4_t_numRecord))
		{
			/* 利用記録の時刻と一致すれば、学生ごとのログイン数を更新 */
			if (st_tp_record[s4_t_ir].s4_time == s4_t_time)
			{
				if (st_tp_record[s4_t_ir].u1_isLogin == (U1)TRUE)
				{
					s4_tp_numLoginPC[st_tp_record[s4_t_ir].s4_studentNum]++;
				}
				else
				{
					s4_tp_numLoginPC[st_tp_record[s4_t_ir].s4_studentNum]--;
				}
				s4_t_ir++;
			}

			/* 解析中の時刻における学生のログイン有無を確認 */
			for (s4_t_im = (S4)0; s4_t_im <= s4_t_numStudent; s4_t_im++)
			{
				/* 学生s4_t_imがログインしていた場合 */
				if (s4_tp_numLoginPC[s4_t_im] >(S4)0)
				{
					u1_tp_isLogin[s4_t_time - START_MINUTES][s4_t_im] = (U1)TRUE;
				}
			}
			s4_t_time++;
		}

		/* 質問の回答 */
		/* 質問数の取得 */
		(void)scanf("%d%c", &s4_t_numQuestion, &u1_t_delimiter);

		for (s4_t_iq = (S4)0; s4_t_iq < s4_t_numQuestion; s4_t_iq++)
		{
			/* 開始・終了時刻、学生番号を取得 */
			(void)scanf("%d %d %d%c", &s4_t_startTime, &s4_t_endTime, &s4_t_studentNum, &u1_t_delimiter);

			/* 利用時間を確認 */
			s4_t_utilizationTime = (S4)0;
			for (s4_t_time = (S4)s4_t_startTime; s4_t_time < s4_t_endTime; s4_t_time++)
			{
				if (u1_tp_isLogin[s4_t_time - START_MINUTES][s4_t_studentNum] == (U1)TRUE)
				{
					s4_t_utilizationTime++;
				}
			}

			printf("!!!%d\n", s4_t_utilizationTime);
		}
	}

	return((S4)(0));
}

