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

#define MAXN 1024
#define MAXQ 5000

int N, K;

char exist[MAXN + 1][MAXN + 1];
int sum[MAXN + 1][MAXN + 1];

char sol[MAXQ + 1][MAXQ + 1];

void error(int points, char *msg)
{
	fprintf(stderr, "%s", msg);
	printf("%d", points);
	exit(0);
}

inline int query( int X, int Y, int L )
{
	return sum[X + L - 1][Y + L - 1] - sum[X - 1][Y + L - 1] - sum[X + L - 1][Y - 1] + sum[X - 1][Y - 1];
}

int main()
{
	FILE *fin = fopen("patrate4.in", "rt");
	if (!fin) error(0, "Fisier de intrare lipsa");
	fscanf(fin, "%d %d", &N, &K);
	for (int i = 0; i < N; i++)
	{
		int a, b;
		fscanf(fin, "%d %d", &a, &b);
		exist[a][b] = 1;
	}

	for (int i = 1; i <= MAXN; i++)
		for (int j = 1; j <= MAXN; j++)
			sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + exist[i][j];

	FILE *fout = fopen("patrate4.out", "rt");
	if (!fout) error(0, "Fisier de iesire lipsa");

	int sN;
	if (fscanf(fout, "%d", &sN) != 1)
		error(0, "Fisier de iesire incomplet");

	for (int i = 0; i < sN; i++)
	{
		int a, b, l;
		if (fscanf(fout, "%d %d %d", &a, &b, &l) != 3)
			error(0, "Fisier de iesire incomplet");

		if (a < 1 || b < 1 || a + l - 1 > 5000 || b + l - 1 > 5000)
			error(0, "Patratele ies din foaie");
		int S, Q;

		S = l * l;
		Q = query( a, b, l );

		if (S > Q * K || Q * K >= 4 * S)
			error(0, "Patratele nu respecta conditiile");

		for (int x = a; x < a + l; x++)
			for (int y = b; y < b + l; y++)
				if (sol[x][y])
					error(0, "Patratele se suprapun");
				else
					sol[x][y] = 1;
	}

	for (int i = 1; i <= MAXN; i++)
		for (int j = 1; j <= MAXN; j++)
			if (exist[i][j] && !sol[i][j])
				error(0, "Nu sunt acoperite toate patratelele negre\n");

	error(5, "Esti baza");

	return 0;
}

