```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
// Use buffered I/O for efficient reading of large input
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
// Helper function to read the next integer from input
readInt := func() int {
scanner.Scan()
val, _ := strconv.Atoi(scanner.Text())
return val
}
// Read N and M (dimensions), though not explicitly used for bounds logic
_ = readInt()
_ = readInt()
// Read number of hotels
C := readInt()
// Initialize min/max values for transformed coordinates (u = x+y, v = x-y)
// Read the first hotel to set initial bounds
hx := readInt()
hy := readInt()
minU := hx + hy
maxU := hx + hy
minV := hx - hy
maxV := hx - hy
// Process remaining hotels to find the bounding box in transformed coordinates
for i := 1; i < C; i++ {
x := readInt()
y := readInt()
u := x + y
v := x - y
if u < minU {
minU = u
}
if u > maxU {
maxU = u
}
if v < minV {
minV = v
}
if v > maxV {
maxV = v
}
}
// Read number of restaurants
H := readInt()
bestDist := -1
bestIdx := -1
// Process each restaurant to find the one minimizing the maximum distance
for i := 1; i <= H; i++ {
rx := readInt()
ry := readInt()
u := rx + ry
v := rx - ry
// Calculate maximum distance from this restaurant to any hotel
// In Chebyshev coordinates, distance is max(|u_r - u_h|, |v_r - v_h|)
// The max over all hotels is max(max|u_r - u_h|, max|v_r - v_h|)
// which simplifies to checking bounds: max(|u_r - minU|, |u_r - maxU|, |v_r - minV|, |v_r - maxV|)
d1 := u - minU
if d1 < 0 {
d1 = -d1
}
d2 := u - maxU
if d2 < 0 {
d2 = -d2
}
d3 := v - minV
if d3 < 0 {
d3 = -d3
}
d4 := v - maxV
if d4 < 0 {
d4 = -d4
}
currentMax := d1
if d2 > currentMax {
currentMax = d2
}
if d3 > currentMax {
currentMax = d3
}
if d4 > currentMax {
currentMax = d4
}
if bestDist == -1 || currentMax < bestDist {
bestDist = currentMax
bestIdx = i
}
}
// Output the optimal distance and the 1-based index of the restaurant
fmt.Println(bestDist)
fmt.Println(bestIdx)
}
```