```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):
        raise ValueError("label must be a non-empty string")

    table = stamp_table(dies)

    def cost(fragment):
        return table.get(fragment, float('inf'))

    def dfs(index, current_cost):
        if index == len(label):
            return current_cost
        min_cost = float('inf')
        for fragment in label[index:]:
            next_cost = dfs(index + 1, current_cost + cost(fragment))
            if next_cost < min_cost:
                min_cost = next_cost
        return min_cost

    return dfs(0, 0)
```