```typescript
export function stampTable(dies: [string, number][]): Map<string, number> {
  const table = new Map<string, number>();
  for (const [fragment, price] of dies) {
    if (!fragment || typeof fragment !== 'string' || !Number.isInteger(price) || price <= 0) {
      throw new Error('Invalid die entry');
    }
    if (table.has(fragment)) {
      throw new Error(`Fragment '${fragment}' listed twice`);
    }
    table.set(fragment, price);
  }
  return table;
}

export function stampCover(label: string, dies: [string, number][]): number {
  const table = stampTable(dies);

  if (!label || typeof label !== 'string' || label.length === 0) {
    throw new Error('Invalid label');
  }

  const memo = new Map<string, number>();
  function dp(index: number): number {
    if (index === label.length) return 0;
    if (memo.has(index)) return memo.get(index)!;

    let minCost = Infinity;
    for (const [fragment, price] of table.entries()) {
      const nextIndex = index + fragment.length;
      if (nextIndex <= label.length && label.substring(index, nextIndex) === fragment) {
        minCost = Math.min(minCost, price + dp(nextIndex));
      }
    }

    memo.set(index, minCost);
    return minCost;
  }

  const result = dp(0);
  if (result === Infinity) {
    throw new Error('No sequence of dies can spell the label');
  }

  return result;
}
```