```python
import math

def tiles_across(length: int, tile: int) -> int:
    """Return how many tiles of a given size cover a length, rounding up."""
    if length < 0 or tile <= 0:
        raise ValueError("Length and tile size must be positive integers.")
    return math.ceil(length / tile)

def tiles_needed(width: int, height: int, tile: int, spare: int) -> int:
    """Return the total number of tiles needed for a wall with allowance for breakages."""
    if width < 0 or height < 0 or tile <= 0 or spare < 0:
        raise ValueError("Width, height, tile size, and spare must be non-negative integers.")
    area = width * height
    tiles_per_area = math.ceil(area / (tile ** 2))
    total_tiles = tiles_per_area + math.ceil(tiles_per_area * spare / 100)
    return total_tiles
```