← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	var s, t string
	var k int
	fmt.Fscan(in, &s, &t, &k)

	isBad := [26]bool{}
	for i := 0; i < 26; i++ {
		if t[i] == '0' {
			isBad[i] = true
		}
	}

	type pair struct {
		h1, h2 uint64
	}
	seen := make(map[pair]struct{})
	n := len(s)

	for i := 0; i < n; i++ {
		badCount := 0
		var h1, h2 uint64
		for j := i; j < n; j++ {
			if isBad[s[j]-'a'] {
				badCount++
			}
			if badCount > k {
				break
			}
			h1 = (h1*131 + uint64(s[j])) % 1000000007
			h2 = h2*37 + uint64(s[j])
			seen[pair{h1, h2}] = struct{}{}
		}
	}

	fmt.Println(len(seen))
}
```