```python
"""Replay tile requests against a size-limited cache of fresh renders."""


def tile_renders(requests: list, fresh_for: int, size: int) -> list:
    for count in (fresh_for, size):
        if isinstance(count, bool) or not isinstance(count, int) or count < 1:
            raise ValueError("fresh_for and size must be positive integers")
    held = {}
    renders = []
    for tick, name in requests:
        if tick < renders[-1][0] if renders else 0:
            raise ValueError("tick must be greater than or equal to the last rendered tick")
        if name in held:
            holds = held[name]
            if holds[-1][0] < tick:
                holds.append((tick, name))
                held[name] = holds
            else:
                renders.remove(holds.pop(0))
                holds.append((tick, name))
                held[name] = holds
        else:
            holds = [(tick, name)]
            held[name] = holds
            renders.append((tick, name))
            if len(held) > size:
                held.pop(min(held, key=lambda x: x[0])[0])
    return renders
```