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

#define ARR_MAX 1000000

typedef struct cordTip{
    float x;
    float y;
}cordTip;

void prikazNiza(int arr[ARR_MAX], int length)
{
    for(int i=0;i<length;i++){
        printf("%d");
        if(i<length-1) printf(" ");
    }
}

float distancaX(float x1, float x2){
    return x1>x2?x1-x2:x2-x1;
}

/// n-k/2


void sortiraj(cordTip niz[], int n){
    for(int i=0;i<n-1;i++){
        for(int j=i+1;j<n;j++){
            if(niz[i].y>niz[j].y){
                cordTip temp = niz[i];
                niz[i]=niz[j];
                niz[j]=temp;
            }
        }
    }
}

int main()
{
    int n, m, k;
    scanf("%d%d%d", &n,&m,&k);

    cordTip nLista[n],
            mLista[m];

    for(int i=0;i<n;i++){
        scanf("%f%f", &nLista[i].x, &nLista[i].y);
    }
    for(int i=0;i<m;i++){
        scanf("%f%f", &mLista[i].x, &mLista[i].y);
    }

    float centralniX=0;
    for(int i=0; i<n;i++) centralniX+=nLista[i].x;
    for(int i=0; i<m;i++) centralniX+=mLista[i].x;
    centralniX=centralniX*1.0/(n+m);

    for(int i=0;i<n;i++){
        for(int j=0; j<m;j++){

        }
    }

    cordTip nDistance[n];
    for(int i =0; i<n;i++){
        nDistance[i].x=i;
        nDistance[i].y=distancaX(centralniX,nLista[i].x);
    } sortiraj(nDistance,n);

    cordTip mDistance[m];
    for(int i =0; i<m;i++){
        mDistance[i].x=i;
        mDistance[i].y=distancaX(centralniX,mLista[i].x);
    } sortiraj(mDistance,m);

    cordTip parovi[k];
    int najvecaDistanca=0;
    for(int i=0; i<k;i++){
        parovi[i].x=nDistance[i].x;
        parovi[i].y=mDistance[k-1-i].x;
        int temp = distancaX(parovi[i].x,parovi[i].y);
        najvecaDistanca=temp>najvecaDistanca?temp:najvecaDistanca;
    }

    int temp2 = (nLista[0].y-mLista[0].y);

    printf("\ndeltaY = %d | Y1 = %f\n", temp2, nLista[0].y);
    printf("%d\n", najvecaDistanca*najvecaDistanca+temp2*temp2);
    for(int i=0; i<k;i++){
        printf("%d %d\n", (int)parovi[i].x+1, (int)parovi[i].y+1);
    }

    return 0;
}