```python
from typing import List, Dict

def end_grab(cards: List[int]) -> Dict[str, int]:
    if not cards:
        return {"first": 0, "second": 0, "taken": []}

    first = max(cards)
    second = min(cards)

    taken = [first]
    cards.remove(first)

    while cards:
        if first == second:
            taken.append(second)
            cards.remove(second)
        else:
            taken.append(max(cards))
            cards.remove(max(cards))

    return {"first": sum(taken), "second": sum(cards), "taken": taken}
```