#include <bits/stdc++.h>
struct point {
  int32_t x, y;
};
std::istream& operator>>(std::istream& is, point& p) {
  int32_t x, y;
  is >> x >> y;
  p.x = x + y;
  p.y = y - x;
  return is;
}
int32_t distance(const point& a, const point& b) {
  return std::max(abs(a.x - b.x), abs(a.y - b.y));
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int64_t n, m;
  std::cin >> n >> m;
  size_t c;
  std::cin >> c;
  std::vector<point> a(c);
  for (size_t i = 0; i < c; ++i) {
    std::cin >> a[i];
  }
  point left = a[0];
  point right = a[0];
  point bottom = a[0];
  point top = a[0];
  for (size_t i = 1; i < c; ++i) {
    if (a[i].x < left.x) {
      left = a[i];
    } else if (a[i].x > right.x) {
      right = a[i];
    }
    if (a[i].y < bottom.y) {
      bottom = a[i];
    } else if (a[i].y > top.y) {
      top = a[i];
    }
  }
  size_t h;
  std::cin >> h;
  std::vector<point> b(h);
  for (size_t i = 0; i < h; ++i) {
    std::cin >> b[i];
  }
  int32_t bestVal = std::numeric_limits<int32_t>::max();
  size_t bestId = std::numeric_limits<size_t>::max();
  for (size_t i = 0; i < h; ++i) {
    const int32_t farthest =
        std::max({distance(left, b[i]), distance(right, b[i]),
                  distance(bottom, b[i]), distance(top, b[i])});
    if (farthest < bestVal) {
      bestVal = farthest;
      bestId = i;
    }
  }
  std::cout << bestVal << '\n';
  std::cout << bestId + 1 << '\n';
}
