#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int p = 31;
const int MOD[2] = {(int)1e9 + 2277, (int)1e9 + 9277};
const int N = 1e5 + 5;
int n, k;
string s, t;
int p_pow[2][N], h[2][N];
void precompute() {
for (int i = 0; i <= 1; i++) {
p_pow[i][0] = 1;
for (int j = 1; j <= n; j++) {
p_pow[i][j] = 1ll * p_pow[i][j - 1] * p % MOD[i];
}
}
for (int i = 0; i <= 1; i++) {
h[i][0] = 0;
for (int j = 1; j <= n; j++) {
h[i][j] = (1ll * h[i][j - 1] * p + (s[j] - 'a' + 1)) % MOD[i];
}
}
}
ii getHash(int l, int r) {
ii ans;
ans.first = (h[0][r] - 1ll * h[0][l - 1] * p_pow[0][r - l + 1] % MOD[0] + MOD[0]) % MOD[0];
ans.second = (h[1][r] - 1ll * h[1][l - 1] * p_pow[1][r - l + 1] % MOD[1] + MOD[1]) % MOD[1];
return ans;
}
vector<ii> hs[N];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> s;
cin >> t;
cin >> k;
n = s.size();
s = ' ' + s;
precompute();
for (int l = 1; l <= n; l++) {
int cnt_bad = 0;
for (int r = l; r <= n; r++) {
int c = s[r] - 'a';
cnt_bad += (t[c] == '0');
if (cnt_bad > k) break;
hs[r - l + 1].push_back(getHash(l, r));
}
}
int ans = 0;
for (int len = 1; len <= n; len++) {
vector<ii>& vec = hs[len];
sort(vec.begin(), vec.end());
vec.resize(unique(vec.begin(), vec.end()) - vec.begin());
ans += vec.size();
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IHAgPSAzMTsgCmNvbnN0IGludCBNT0RbMl0gPSB7KGludCkxZTkgKyAyMjc3LCAoaW50KTFlOSArIDkyNzd9OyAgCmNvbnN0IGludCBOID0gMWU1ICsgNTsgCgppbnQgbiwgazsgIApzdHJpbmcgcywgdDsgCmludCBwX3Bvd1syXVtOXSwgaFsyXVtOXTsgCgp2b2lkIHByZWNvbXB1dGUoKSB7Cglmb3IgKGludCBpID0gMDsgaSA8PSAxOyBpKyspIHsKCQlwX3Bvd1tpXVswXSA9IDE7IAoJCWZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykgewoJCQlwX3Bvd1tpXVtqXSA9IDFsbCAqIHBfcG93W2ldW2ogLSAxXSAqIHAgJSBNT0RbaV07IAoJCX0KCX0KCglmb3IgKGludCBpID0gMDsgaSA8PSAxOyBpKyspIHsKCQloW2ldWzBdID0gMDsgCgkJZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKSB7CgkJCWhbaV1bal0gPSAoMWxsICogaFtpXVtqIC0gMV0gKiBwICsgKHNbal0gLSAnYScgKyAxKSkgJSBNT0RbaV07IAoJCX0KCX0KfQoKaWkgZ2V0SGFzaChpbnQgbCwgaW50IHIpIHsKCWlpIGFuczsgCglhbnMuZmlyc3QgPSAoaFswXVtyXSAtIDFsbCAqIGhbMF1bbCAtIDFdICogcF9wb3dbMF1bciAtIGwgKyAxXSAlIE1PRFswXSArIE1PRFswXSkgJSBNT0RbMF07IAoJYW5zLnNlY29uZCA9IChoWzFdW3JdIC0gMWxsICogaFsxXVtsIC0gMV0gKiBwX3Bvd1sxXVtyIC0gbCArIDFdICUgTU9EWzFdICsgTU9EWzFdKSAlIE1PRFsxXTsKCXJldHVybiBhbnM7ICAKfQoKdmVjdG9yPGlpPiBoc1tOXTsgCgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gczsgCgljaW4gPj4gdDsgIAoJY2luID4+IGs7IAoJbiA9IHMuc2l6ZSgpOyAKCXMgPSAnICcgKyBzOwoKCXByZWNvbXB1dGUoKTsgIAoKCWZvciAoaW50IGwgPSAxOyBsIDw9IG47IGwrKykgewoJCWludCBjbnRfYmFkID0gMDsgIAoJCWZvciAoaW50IHIgPSBsOyByIDw9IG47IHIrKykgewoJCQlpbnQgYyA9IHNbcl0gLSAnYSc7IAoJCQljbnRfYmFkICs9ICh0W2NdID09ICcwJyk7IAoJCQlpZiAoY250X2JhZCA+IGspIGJyZWFrOyAgCgkJCWhzW3IgLSBsICsgMV0ucHVzaF9iYWNrKGdldEhhc2gobCwgcikpOyAKCQl9Cgl9CgoJaW50IGFucyA9IDA7ICAKCWZvciAoaW50IGxlbiA9IDE7IGxlbiA8PSBuOyBsZW4rKykgewoJCXZlY3RvcjxpaT4mIHZlYyA9IGhzW2xlbl07ICAgCgkJc29ydCh2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpKTsgICAKCQl2ZWMucmVzaXplKHVuaXF1ZSh2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpKSAtIHZlYy5iZWdpbigpKTsgCgkJYW5zICs9IHZlYy5zaXplKCk7IAoJfSAgCgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgCn0=