#include <bits/stdc++.h>
using namespace std;
const int Maxn = 2e5 + 10;
set<int> d;
int cnt[12][12];
int toint(char c) { return c - 'a'; }
char seg[Maxn << 2];
void shift(int id) {
  if (seg[id] == 'z') return;
  seg[id << 1] = seg[id];
  seg[id << 1 | 1] = seg[id];
  seg[id] = 'z';
}
void change(int id, int l, int r, char c, int L, int R) {
  if ((r <= L) || (R <= l)) return;
  if ((l <= L) && (R <= r)) {
    seg[id] = c;
    return;
  }
  shift(id);
  int mid = (L + R) >> 1;
  change(id << 1, l, r, c, L, mid);
  change(id << 1 | 1, l, r, c, mid, R);
}
char get(int id, int l, int r, int L, int R) {
  if ((r <= L) || (R <= l)) return 'z';
  if ((l <= L) && (R <= r)) return seg[id];
  shift(id);
  int mid = (L + R) >> 1;
  return min(get(id << 1, l, r, L, mid), get(id << 1 | 1, l, r, mid, R));
}
int S(int idx) { return toint(get(1, idx, idx + 1, 0, Maxn)); }
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  d.insert(Maxn);
  int n, m, k;
  cin >> n >> m >> k;
  string s;
  cin >> s;
  for (int i = 0; i < n - 1; i++) {
    if (s[i] != s[i + 1]) {
      d.insert(i);
      cnt[toint(s[i])][toint(s[i + 1])]++;
    }
  }
  for (int i = 0; i < n; i++) change(1, i, i + 1, s[i], 0, Maxn);
  int t, l, r, nx, ans;
  char x;
  string p;
  for (int i = 0; i < m; i++) {
    cin >> t;
    if (t == 1) {
      cin >> l >> r >> x;
      l--;
      r--;
      while (true) {
        nx = *d.lower_bound(l);
        if (nx < r) {
          cnt[S(nx)][S(nx + 1)]--;
          d.erase(nx);
        } else
          break;
      }
      if (d.count(l - 1)) {
        cnt[S(l - 1)][S(l)]--;
        d.erase(l - 1);
      }
      if (d.count(r)) {
        cnt[S(r)][S(r + 1)]--;
        d.erase(r);
      }
      change(1, l, r + 1, x, 0, Maxn);
      if (0 < l && S(l - 1) != S(l)) {
        cnt[S(l - 1)][S(l)]++;
        d.insert(l - 1);
      }
      if (r < n - 1 && S(r) != S(r + 1)) {
        cnt[S(r)][S(r + 1)]++;
        d.insert(r);
      }
    } else {
      ans = n + 1 - d.size();
      cin >> p;
      for (int j = 0; j < k; j++)
        for (int j2 = 0; j2 <= j; j2++) ans += cnt[toint(p[j])][toint(p[j2])];
      cout << ans << '\n';
    }
  }
  return 0;
}
