Олимпиадный тренинг

Задача . D. Хорошие подстрочки


Вам дана строка s, состоящая из строчных латинских букв. Некоторые из латинских букв являются хорошими, остальные — плохими.

Подстрокой s[l...r] (1 ≤ l ≤ r ≤ |s|) строки s  =  s1s2...s|s| (где |s| — длина строки s) называется строка slsl + 1...sr.

Подстроку s[l...r] назовем хорошей, если среди букв sl, sl + 1, ..., sr не более k являются плохими (смотрите пояснения к примерам для лучшего понимания).

Ваша задача — найти количество различных хороших подстрок данной строки s. Две подстроки s[x...y] и s[p...q] различны, если различно их содержимое, то есть s[x...y] ≠ s[p...q].

Входные данные

Первая строка входных данных — это непустая строка s, состоящая из строчных латинских букв, длиной не более 1500 символов.

Вторая строка входных данных — это строка из символов «0» и «1» длиной ровно 26 символов. Если i-ый символ этой строки равен «1», то i-ая буква латинского алфавита является хорошей, иначе — плохой. То есть первый символ этой строки соответствует букве «a», второй — букве «b» и так далее.

В третьей строке входных данных записано единственное целое число k (0 ≤ k ≤ |s|) — максимальное допустимое количество плохих символов в хорошей подстроке.

Выходные данные

Выведите единственное целое число — количество различных хороших подстрок строки s.

Примечание

В первом примере хорошими подстроками являются: «a», «ab», «b», «ba», «bab».

Во втором примере хорошими подстроками являются: «a», «aa», «ac», «b», «ba», «c», «ca», «cb».


Примеры
Входные данныеВыходные данные
1 ababab
01000000000000000000000000
1
5
2 acbacbacaa
00000000000000000000000000
2
8

time 2000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя