```python
from typing import List, Tuple

def split_agenda(sessions: List[Tuple[int, int]], limit: int) -> List[Tuple[int, int]]:
    if not sessions or not limit % 1:
        raise ValueError("Limit must be a whole number")

    blocks = []
    for start, end in sessions:
        if start >= end:
            raise ValueError("Sessions must have start < end")

        if start < blocks[-1][1] if blocks else False:
            raise ValueError("Sessions must not overlap")

        if end - start < limit:
            blocks.append((start, end))
        else:
            mid = (start + end) // 2
            front = (mid - start + 1) // 2
            back = (end - mid) // 2
            blocks.extend([(start, mid + front), (mid + front, mid + back + 1)])
    return blocks
```