```python
from math import ceil

def tiles_across(length: int, tile: int) -> int:
    """Return the number of tiles needed to cover a length, rounding up."""
    if length <= 0 or tile <= 0:
        raise ValueError("Length and tile size must be positive integers.")
    return 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, including a spare percentage."""
    if width <= 0 or height <= 0 or tile <= 0 or spare < 0:
        raise ValueError("Width, height, tile size, and spare must be non-negative, with spare being non-positive.")
    area = width * height
    tiles = ceil(area / tile)
    spare_tiles = ceil(tiles * spare / 100)
    return tiles + spare_tiles
```