```python
def union_coverage(rects: list[list[int]]) -> int:
    if not all(isinstance(x, (int, float)) for x in sum(rects, [])):
        raise ValueError("All elements must be integers")
    if any(x < -10000 or x > 10000 for x in sum(rects, [])):
        raise ValueError("Coordinates must be within the range -10000 to 10000")
    if not all(len(r) == 4 and r[2] > r[0] and r[3] > r[1] for r in rects):
        raise ValueError("Invalid rectangle format")

    def add_to_cover(x, y):
        if (x, y) not in cover:
            cover.add((x, y))
            x_min = min(x_min, x)
            y_min = min(y_min, y)
            x_max = max(x_max, x + 1)
            y_max = max(y_max, y + 1)

    if not rects:
        return 0

    cover = set()
    x_min, y_min = 20001, 20001
    x_max, y_max = -20001, -20001
    for x1, y1, x2, y2 in rects:
        for x in range(x1, x2):
            for y in range(y1, y2):
                add_to_cover(x, y)

    return (x_max - x_min) * (y_max - y_min)
```