#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;

int p, q;

void pravac(vector<pair<int, int> > &nisovskiBrodovi, vector<pair<int, int> > &marsovskiBrodovi, int &pravacX, int &pravacY) {
    int i = 1;
    while(i < nisovskiBrodovi.size()) {
        if(nisovskiBrodovi[0].first != nisovskiBrodovi[i].first || nisovskiBrodovi[0].second != nisovskiBrodovi[i].second) {
            pravacX = nisovskiBrodovi[i].first - nisovskiBrodovi[0].first;
            pravacY = nisovskiBrodovi[i].second - nisovskiBrodovi[0].second;
            return;
        }
        i++;
    }
    i = 1;
    while(i < marsovskiBrodovi.size()) {
        if(marsovskiBrodovi[0].first != marsovskiBrodovi[i].first || marsovskiBrodovi[0].second != marsovskiBrodovi[i].second) {
            pravacX = marsovskiBrodovi[i].first - marsovskiBrodovi[0].first;
            pravacY = marsovskiBrodovi[i].second - marsovskiBrodovi[0].second;
            return;
        }
        i++;
    }
    pravacX = 1;
    pravacY = 0;
}

long double skalarni_proizvod(long double Ax, long double Ay, long double Bx, long double By) {
    return Ax * Bx + Ay * By;
}

long double vektorski_proizvod(long double Ax, long double Ay, long double Bx, long double By) {
    return Ax * By - Bx * Ay;
}

long double duzina(long double x, long double y) {
    return sqrt(x * x + y * y);
}

long double distanca(vector<long double> &nis, vector<long double> &mars, int k, int i, int &p1, int &q1) {
    long double sredina = 0;
    for(int j = i; j < i + k; j++)
        sredina += nis[j];
    sredina /= (long double)k;
    
    //cout << sredina << '\n';
    
    int l = 0;
    while(mars[l] < sredina) l++;
    if(l > 0 && sredina - mars[l-1] < mars[l] - sredina)
        l--;
    
    int r = l;
    while(r - l + 1 < k) {
        if(l > 0) {
            if(r + 1 < mars.size()) {
                if(sredina - mars[l-1] < mars[r+1] - sredina)
                    l--;
                else
                    r++;
            }else
                l--;
        }else
            r++;
    }
    //cout << l << "LR" << r << '\n';
    long double najvecaDistanca = 0;
    for(int j = 0; j < k; j++) {
        if(najvecaDistanca <= abs(nis[i+j] - mars[l+j])) {
            najvecaDistanca <= abs(nis[i+j] - mars[l+j]);
            p1 = l;
            q1 = r;
        }
    }
    
    //cout << najvecaDistanca << " = najvecaDistanca\n";
    
    return najvecaDistanca;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int n, m, k;
    cin >> n >> m >> k;
    vector<pair<int, int> > nisovskiBrodovi(n);
    vector<pair<int, int> > marsovskiBrodovi(m);
    for(int i = 0; i < n; i++)
        cin >> nisovskiBrodovi[i].first >> nisovskiBrodovi[i].second;
    for(int i = 0; i < m; i++)
        cin >> marsovskiBrodovi[i].first >> marsovskiBrodovi[i].second;
    
    sort(nisovskiBrodovi.begin(), nisovskiBrodovi.end());
    sort(marsovskiBrodovi.begin(), marsovskiBrodovi.end());
    
    int pravacX, pravacY;
    pravac(nisovskiBrodovi, marsovskiBrodovi, pravacX, pravacY);
    
    //cout << pravacX << ' ' << pravacY << '\n';
    
    vector<long double> nis(n);
    vector<long double> mars(m);
    
    long double d = duzina(pravacX, pravacY);
    for(int i = 0; i < n; i++) {
        nis[i] = skalarni_proizvod(pravacX, pravacY,
            nisovskiBrodovi[i].first - nisovskiBrodovi[0].first, nisovskiBrodovi[i].second - nisovskiBrodovi[0].second) / d;
    }
    for(int i = 0; i < m; i++) {
        mars[i] = skalarni_proizvod(pravacX, pravacY,
            marsovskiBrodovi[i].first - nisovskiBrodovi[0].first, marsovskiBrodovi[i].second - nisovskiBrodovi[0].second) / d;
    }
    
    //for(auto x : nis) cout << x << ' '; cout << '\n';
    //for(auto x : mars) cout << x << ' '; cout << '\n';
    
    long double najmanjaDistanca = 1e+67;
    for(int i = 0; i < n - k + 1; i++) {
        int p1, q1;
        if(najmanjaDistanca >= distanca(nis, mars, k, i, p1, q1)) {
            najmanjaDistanca = distanca(nis, mars, k, i, p1, q1);
            p = p1;
            q = q1;
        }
    }
    
    long double udaljenost = vektorski_proizvod(pravacX, pravacY,
        marsovskiBrodovi[0].first - nisovskiBrodovi[0].first, marsovskiBrodovi[0].second - nisovskiBrodovi[0].second) / d;
    long double dist = najmanjaDistanca * najmanjaDistanca + udaljenost * udaljenost;
    
    cout << dist << '\n';
    for(int i = p; i <= q; i++) {
        cout << nisovskiBrodovi[i].first << ' ' << nisovskiBrodovi[i].second << '\n';
    }
    
    return 0;
}