```python
from typing import *
from collections import *

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:
    # Validate the label
    if not isinstance(label, str) or not label:
        raise ValueError("a label must be a non-empty string")

    # Build the stamping table
    stamp_table = stamp_table(dies)

    # Initialize the memoization dictionary
    memo = {}

    def dp(i):
        # Base case: if we've processed the entire label
        if i == len(label):
            return 0

        if i in memo:
            return memo[i]

        min_cost = float('inf')
        current_fragment = ""

        for j in range(i, len(label) + 1):
            current_fragment += label[j]
            if current_fragment in stamp_table:
                cost = stamp_table[current_fragment] + dp(j + 1)
                min_cost = min(min_cost, cost)

        memo[i] = min_cost
        return min_cost

    # Start the dynamic programming to find the cheapest sequence of die presses
    result = dp(0)

    if result == float('inf'):
        raise ValueError("no sequence of dies can spell the label")

    return result
```