```python
def stamp_table(dies: list) -> dict:
    table = {}
    for fragment, price in dies:
        if not isinstance(fragment, str) or not fragment:
            raise ValueError("a die fragment must be a non-empty string")
        if isinstance(price, bool) or not isinstance(price, int) or price <= 0:
            raise ValueError("a die price must be a positive integer")
        if fragment in table:
            raise ValueError("die listed twice: " + fragment)
        table[fragment] = price
    return table


def stamp_cover(label: str, dies: list) -> int:
    if not isinstance(label, str) or not label:
        raise ValueError("label must be a non-empty string")

    table = stamp_table(dies)

    # Initialize the DP array where dp[i] represents the minimum cost to cover the first i characters of the label
    dp = [float('inf')] * (len(label) + 1)
    dp[0] = 0

    for i in range(1, len(label) + 1):
        for fragment, price in table.items():
            if i >= len(fragment) and label[i - len(fragment):i] == fragment:
                dp[i] = min(dp[i], dp[i - len(fragment)] + price)

    # If the last element is still infinity, it means there's no way to cover the entire label
    if dp[-1] == float('inf'):
        raise ValueError("no sequence of dies can spell the label")

    return dp[-1]
```