#include <bits/stdc++.h>
using namespace std;
int cuantos[10][10];
struct elem {
  int c, ri;
  elem() {}
  elem(int inc, int inri) {
    c = inc;
    ri = inri;
  }
};
map<int, elem> mapa;
int anterior(map<int, elem>::iterator it) {
  if (it == mapa.begin()) return -1;
  it--;
  return it->second.c;
}
int siguiente(map<int, elem>::iterator it) {
  it++;
  if (it == mapa.end()) return -1;
  return it->second.c;
}
void borrar(int le, int ri, int inicial) {
  map<int, elem>::iterator it = mapa.upper_bound(le);
  it--;
  int ele = it->first;
  int ec = it->second.c;
  int eri = it->second.ri;
  if (ele < le) {
    it->second.ri = le - 1;
    if (ri < eri) {
      mapa[ri + 1] = elem(ec, eri);
      cuantos[ec][ec] -= ri - le + 2;
    } else {
      int nextc = siguiente(it);
      cuantos[ec][ec] -= eri - le + 1;
      if (nextc != -1) cuantos[ec][nextc]--;
      if (ri > eri) borrar(eri + 1, ri, 0);
    }
  } else {
    int antc = anterior(it);
    int nextc = siguiente(it);
    mapa.erase(it);
    if (inicial and antc != -1) cuantos[antc][ec]--;
    if (ri < eri) {
      mapa[ri + 1] = elem(ec, eri);
      cuantos[ec][ec] -= ri - le + 1;
    } else {
      cuantos[ec][ec] -= eri - le;
      if (nextc != -1) cuantos[ec][nextc]--;
      if (ri > eri) borrar(eri + 1, ri, 0);
    }
  }
}
void insertar(int le, int ri, int c) {
  mapa[le] = elem(c, ri);
  map<int, elem>::iterator it = mapa.find(le);
  int antc = anterior(it);
  int nextc = siguiente(it);
  if (antc != -1) cuantos[antc][c]++;
  cuantos[c][c] += ri - le;
  if (nextc != -1) cuantos[c][nextc]++;
}
int pos[10];
int n, m, k;
void escribe() {
  for (map<int, elem>::iterator it = mapa.begin(); it != mapa.end(); it++)
    cout << "[" << it->first << "," << it->second.ri << "," << it->second.c
         << "]" << endl;
  for (int c1 = 0; c1 < k; c1++) {
    for (int c2 = 0; c2 < k; c2++) cout << cuantos[c1][c2];
    cout << endl;
  }
  cout << endl;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++) {
    char car;
    cin >> car;
    int c = car - 'a';
    insertar(i, i, c);
  }
  for (int i = 0; i < m; i++) {
    int t;
    cin >> t;
    if (t == 1) {
      int le, ri;
      char car;
      cin >> le >> ri >> car;
      int c = car - 'a';
      borrar(le, ri, 1);
      insertar(le, ri, c);
    } else {
      for (int j = 0; j < k; j++) {
        char car;
        cin >> car;
        int c = car - 'a';
        pos[c] = j;
      }
      int sol = 1;
      for (int c1 = 0; c1 < k; c1++)
        for (int c2 = 0; c2 < k; c2++)
          if (pos[c2] <= pos[c1]) sol += cuantos[c1][c2];
      cout << sol << endl;
    }
  }
}
