```python
from typing import Dict

def plan_batches(units: int, capacity: int) -> Dict[str, int]:
    if not isinstance(units, int) or units <= 0:
        raise ValueError("Units must be a positive integer")
    if not isinstance(capacity, int) or capacity <= 0:
        raise ValueError("Capacity must be a positive integer")

    loads = []
    splits = 0
    rounds = 0

    def plan(units: int, capacity: int, current_rounds: int) -> None:
        nonlocal splits, rounds
        if units <= capacity:
            loads.append(units)
            rounds = max(rounds, current_rounds)
        else:
            splits += 1
            half_up = (units + 1) // 2
            half_down = units - half_up
            plan(half_up, capacity, current_rounds + 1)
            plan(half_down, capacity, current_rounds + 1)

    plan(units, capacity, 0)

    return {"loads": loads, "splits": splits, "rounds": rounds}
```