#include <bits/stdc++.h>
using namespace std;
namespace _buff {
const size_t buff_size = 1e5;
char buff[buff_size], *begin = buff, *end = buff;
char getc() {
  if (begin == end) end = (begin = buff) + fread(buff, 1, buff_size, stdin);
  return begin == end ? -1 : *begin++;
}
}  // namespace _buff
int read() {
  using namespace _buff;
  int ret = 0;
  bool pos = true;
  char c = getc();
  for (; (c < '0' || c > '9') && c != '-'; c = getc()) assert(~c);
  if (c == '-') {
    pos = false;
    c = getc();
  }
  for (; c >= '0' && c <= '9'; c = getc())
    ret = (ret << 3) + (ret << 1) + (c ^ 48);
  return pos ? ret : -ret;
}
void read_s(int s[]) {
  using namespace _buff;
  char c = getc();
  size_t len = 0;
  for (; c < 'a' || c > 'z'; c = getc()) assert(~c);
  for (; c >= 'a' && c <= 'z'; c = getc()) s[len++] = c - 'a';
  s[len] = 15;
}
const size_t maxn = 2e5 + 5;
int n, m, k, cnt[16][16], s[maxn];
map<int, int> mp;
void modify(int l, int r, int c) {
  auto lb = mp.lower_bound(l), rb = mp.upper_bound(r);
  int lst = lb->second;
  if (lb == rb) {
    if (lst != c) {
      ++cnt[c][lst];
      mp[r] = c;
    }
  } else {
    int t = lst;
    for (auto it = lb; ++it != rb; t = it->second) --cnt[t][it->second];
    if (rb != mp.end()) --cnt[t][rb->second];
    for (; lb != rb; lb = mp.erase(lb)) {
    }
    if (rb != mp.end() && rb->second != c) ++cnt[c][rb->second];
    if (rb == mp.end() || rb->second != c) mp[r] = c;
  }
  if (l && lst != c) {
    ++cnt[lst][c];
    mp[l] = lst;
  }
}
int solve(int s[]) {
  int ret = n;
  for (int i = 0; i < k; ++i) {
    for (int j = i + 1; j < k; ++j) {
      ret -= cnt[s[i]][s[j]];
    }
  }
  return ret;
}
int main() {
  n = read();
  m = read();
  k = read();
  read_s(s);
  for (int i = 1; i <= n; ++i) {
    if (s[i] != s[i - 1]) {
      mp[i] = s[i - 1];
      ++cnt[s[i - 1]][s[i]];
    }
  }
  while (m--) {
    static int typ, l, r, s[15];
    typ = read();
    if (typ == 1) {
      l = read();
      r = read();
      read_s(s);
      modify(l - 1, r, s[0]);
    } else {
      read_s(s);
      printf("%d\n", solve(s));
    }
  }
}
