```python
def jar_balances(topup: int, lid: int, outflows: list) -> list:
    if not isinstance(outflows, list):
        raise ValueError("outflows must be a list")
    if not all(isinstance(x, int) and x >= 0 for x in [topup, lid] + outflows):
        raise ValueError("all topup, lid, and outflows must be non-negative integers")

    balances = []
    current_balance = 0
    for outflow in outflows:
        current_balance += topup - outflow
        if current_balance < 0:
            raise ValueError(f"outflow exceeds jar contents: {current_balance}")
        balances.append(min(current_balance, lid))
    return balances
```