```python
def token_bucket(capacity: int, refill: int, requests: list[list[int]]) -> list[str]:
    if capacity <= 0:
        raise ValueError("Capacity must be a positive integer")
    if refill < 0:
        raise ValueError("Refill rate must be a non-negative integer")
    if not all(isinstance(cost, int) and cost > 0 for _, cost in requests):
        raise ValueError("Cost must be a positive integer")
    if any(time < 0 for time, _ in requests[1:]):
        raise ValueError("Arrival times must not decrease")
    if any(requests[i][0] > requests[i + 1][0] for i in range(len(requests) - 1)):
        raise ValueError("Arrival times cannot go backwards")

    tokens = capacity
    last_time = 0
    results = []

    for time, cost in requests:
        if time < last_time:
            raise ValueError("Arrival times must not decrease")
        if time > last_time:
            tokens += (time - last_time) * refill
            if tokens > capacity:
                tokens = capacity
        if tokens >= cost:
            results.append("grant")
            tokens -= cost
        else:
            results.append("refuse")

        last_time = time

    return results
```