```python
def tier_cost(units: int, allowance: int, first_rate: int, later_rate: int) -> int:
    """Calculate the cost of units based on tiered pricing rates.
    
    Args:
        units: The total number of units consumed.
        allowance: The number of units charged at the first_rate.
        first_rate: The cost per unit for usage within the allowance.
        later_rate: The cost per unit for usage beyond the allowance.
        
    Returns:
        The total cost in whole pence.
        
    Raises:
        ValueError: If units is negative.
    """
    if units < 0:
        raise ValueError("Units cannot be negative")
    
    if units <= allowance:
        return units * first_rate
    else:
        allowance_cost = allowance * first_rate
        excess_units = units - allowance
        excess_cost = excess_units * later_rate
        return allowance_cost + excess_cost
```