#include <bits/stdc++.h>
using namespace std;

struct tac{
double x,y;
int inx;
};

bool comp(tac p, tac q){
    return q.x > p.x;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,m,k; cin >> n >> m >> k;
    vector<tac> a(n), b(m);
    for(int i=0; i<n; i++){
        cin >> a[i].x >> a[i].y;
        a[i].inx=i;
    }
    for(int i=0; i<m; i++){
        cin >> b[i].x >> b[i].y;
        b[i].inx=i;
    }


    for(int i=0; i<n; i++){
        if(a[i].y != a[0].y)goto dalje;
    }
    for(int j=0; j<m; j++){
        if(b[j].y != b[0].y)goto dalje;
    }
    sort(a.begin(),a.end(),comp);
    sort(b.begin(), b.begin(),comp);
    /*cout << "!\n";
    for(int i=0; i<n; i++){
        cout << a[i].x << ' ' << a[i].y << ' ' << a[i].inx << '\n';
    }
    cout << "!\n";
    for(int i=0; i<m; i++){
        cout << b[i].x << ' ' << b[i].y << ' ' << b[i].inx << '\n';
    }
    cout << "!\n";*/
    if(!(a[0].x>b[m-1].x || a[n-1].x<b[0].x))goto dalje;
    if(a[0].x<b[0].x){
        double m=-1;
        for(int i=n-k; i<n; i++){
            cout << a[i].inx+1 << ' ' << b[i-n+k].inx+1 << '\n';
            m=max(m,(a[i].x-b[i-n+k].x)*(a[i].x-b[i-n+k].x)+(a[i].y-b[i-n+k].y)*(a[i].y-b[i-n+k].y));
        }
    cout << m << '\n';
    return 0;
    }
    else {
        double m=-1;
        for(int j = m-k; j<m; j++){
            cout << a[j-m+k].inx+1 << ' ' << b[j].inx+1 << '\n';
            m=max(m,(b[j].x-a[j-m+k].x)*(b[j].x-a[j-m+k].x)+(b[j].y-a[j-m+k].y)*(b[j].y-a[j-m+k].y));
        }
        cout << m << '\n';
    }
    dalje:;
    return 0;
}