#include <iostream>
#include <vector>
using namespace std;

unsigned long long kvadratno_rastojanje(long long x1, long long y1, long long x2, long long y2) {
	unsigned long long dx = (x1 > x2) ? (x1 - x2) : (x2 - x1);
	unsigned long long dy = (y1 > y2) ? (y1 - y2) : (y2 - y1);
	
	return dx*dx + dy*dy;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	
	// 1) UCITAVANJE PODATAKA
	
	int N;	//brodovi nisovaca
	int M;	//brodovi marsovaca
	int K;	//koliko ce ucestvovati u napadu
	cin >> N >> M >> K;
	
	vector<pair<long long, long long>> nis(N + 1);
	vector<pair<long long, long long>> mars(M + 1);
	
	for(int i = 1; i <= N; i++) {
		cin >> nis[i].first >> nis[i].second;
	}
	for(int i = 1; i <= M; i++) {
		cin >> mars[i].first >> mars[i].second;
	}
	
	// 2) INCIJALIZACIJA
	
	unsigned long long najbolje_max_rastojanje = -1;
	
	int najbolje_i = -1;
	int najbolje_j = -1;
	
	bool obrnuti_smer = false;
	
	// 3) BRUTE FORCE (OBA SMERA)
	
	for(int i = 1; i <= N - K + 1; i++) {
		for(int j = 1; j <= M - K + 1; j++) {
			
			unsigned long long max_sekv = 0;
			bool prekinuta_sekv = false;
			
			//long long trenutno_max_rastojanje = -1;
			//bool prekinuto = false;
			
			for(int korak = 0; korak < K; korak++) {
				unsigned long long d = kvadratno_rastojanje(nis[i+korak].first, nis[i+korak].second, mars[j+korak].first, mars[j+korak].second);
				if(d > max_sekv) {
					max_sekv = d;
				}
				if(max_sekv >= najbolje_max_rastojanje) {
					prekinuta_sekv = true;
					break;
				}
			}
			if(!prekinuta_sekv && max_sekv < najbolje_max_rastojanje) {
				najbolje_max_rastojanje = max_sekv;
				najbolje_i = i;
				najbolje_j = j;
				obrnuti_smer = false;
			}
			
			unsigned long long max_obrnuto = 0;
			bool prekinuto_obrnuto = false;
			
			for(int korak = 0; korak < K; korak++) {
				unsigned long long d = kvadratno_rastojanje(nis[i+korak].first, nis[i+korak].second, mars[j+ K - 1 - korak].first, mars[j + K - 1 - korak].second);
				if(d > max_obrnuto) {
					max_obrnuto = d;
				}
				if(max_obrnuto >= najbolje_max_rastojanje) {
					prekinuto_obrnuto = true;
					break;
				}
			}
			if(!prekinuto_obrnuto && max_obrnuto < najbolje_max_rastojanje) {
				najbolje_max_rastojanje = max_obrnuto;
				najbolje_i = i;
				najbolje_j = j;
				obrnuti_smer = true;
			}
		}
	} 
	
	// 4) IZLAZ
	
	cout << najbolje_max_rastojanje << '\n';
	
	for(int korak = 0; korak < K; korak++) {
		if(!obrnuti_smer) {
			cout << (najbolje_i + korak) << " " << (najbolje_j + korak) << '\n';
		}
		else {
			cout << (najbolje_i + korak) << " " << (najbolje_j + K - 1 - korak) << '\n';
		}
	}
	
	return 0;	
}