```python
def run_reservoir(capacity: int, start: int, ticks: list) -> dict:
    if capacity <= 0:
        raise ValueError("Capacity must be a positive integer")
    if not (0 <= start <= capacity):
        raise ValueError("Starting level must be an integer from 0 to the capacity")
    if len(ticks) == 0:
        raise ValueError("No ticks provided")
    if len(ticks[0]) != 2 or not (isinstance(ticks[0][0], int) and isinstance(ticks[0][1], int)):
        raise ValueError("Inflow and demand must be non-negative integers")
    if ticks[0][0] > capacity:
        raise ValueError("Inflow cannot exceed the capacity")

    level = start
    spilled = 0
    shortfall = 0
    served = 0

    for inflow, demand in ticks:
        if inflow > capacity:
            spilled += inflow - capacity
            inflow = capacity
        level += inflow
        if level > capacity:
            spilled += level - capacity
            level = capacity
        if level >= demand:
            served += demand
            level -= demand
        else:
            shortfall += demand - level
            level = 0

    return {
        'level': level,
        'spilled': spilled,
        'shortfall': shortfall,
        'served': served
    }
```