#include <bits/stdc++.h>
using namespace std;
const long long inf = (long long)1e18;
int N, M, n, m, lst;
struct Point {
  long long x, y;
} A[100005], B[100005];
inline bool okok(long long d) {
  assert(d >= 0);
  long long x1 = -inf, x2 = inf, y1 = inf, y2 = -inf;
  for (int(i) = 0; (i) < (int)(n); ++(i)) {
    long long x3 = A[i].x - d, x4 = A[i].x + d;
    long long y3 = A[i].y + d, y4 = A[i].y - d;
    if (x4 < x1 || x3 > x2 || y3 < y2 || y4 > y1) return 0;
    long long xx1 = max(x1, x3), xx2 = min(x2, x4);
    long long yy1 = min(y1, y3), yy2 = max(y2, y4);
    x1 = xx1, x2 = xx2, y1 = yy1, y2 = yy2;
  }
  for (int(i) = 0; (i) < (int)(m); ++(i)) {
    long long x = B[i].x, y = B[i].y;
    if (x >= x1 && x <= x2 && y <= y1 && y >= y2) return lst = i, 1;
  }
  return 0;
}
int main(int argc, char const *argv[]) {
  cin >> N >> M;
  cin >> n;
  for (int(i) = 0; (i) < (int)(n); ++(i)) {
    int x, y;
    cin >> x >> y;
    A[i] = (Point){x + y, x - y};
  }
  cin >> m;
  for (int(i) = 0; (i) < (int)(m); ++(i)) {
    int x, y;
    cin >> x >> y;
    B[i] = (Point){x + y, x - y};
  }
  long long l = 0, r = (int)2e9 + 5;
  while (l < r) {
    long long mid = l + ((r - l) >> 1);
    if (okok(mid))
      r = mid;
    else
      l = mid + 1;
  }
  okok(l);
  printf("%lld\n%d\n", l, lst + 1);
  return 0;
}
