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

long long kvadratno_rastojanje(long long x1, long long y1, long long x2, long long y2) {
	return (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
}

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
	
	long long najbolje_max_rastojanje = 8e18;
	
	int najbolje_i = -1;
	int najbolje_j = -1;
	
	// 3) BRUTE FORCE
	
	for(int i = 1; i <= N - K + 1; i++) {
		for(int j = 1; j <= M - K + 1; j++) {
			long long trenutno_max_rastojanje = -1;
			bool prekinuto = false;
			
			for(int korak = 0; korak < K; korak++) {
				long long d = kvadratno_rastojanje(nis[i+korak].first, nis[i+korak].second, mars[j+korak].first, mars[j+korak].second);
				if(d > trenutno_max_rastojanje) {
					trenutno_max_rastojanje = d;
				}
				if(trenutno_max_rastojanje >= najbolje_max_rastojanje) {
					prekinuto = true;
					break;
				}
			}
			if(!prekinuto && trenutno_max_rastojanje < najbolje_max_rastojanje) {
				najbolje_max_rastojanje = trenutno_max_rastojanje;
				najbolje_i = i;
				najbolje_j = j;
			}
		}
	} 
	
	// 4) IZLAZ
	
	cout << najbolje_max_rastojanje << '\n';
	
	for(int korak = 0; korak < K; korak++) {
		cout << (najbolje_i + korak) << " " << (najbolje_j + korak) << '\n';
	}
	
	return 0;	
}