#include <bits/stdc++.h>
using namespace std;
#define TASK ""
#define ii pair<int, int>
struct aho_corasick{
struct node{
int suffix_link = -1, exit_link = -1, nxt[128];
vector<int> leaf;
node() {fill(nxt, nxt+128, -1);}
};
vector<node> g = {node()};
void insert_string(const string &s, int sidx){
int p = 0;
for (char c: s){
if (g[p].nxt[c] == -1){
g[p].nxt[c] = g.size();
g.emplace_back();
}
p = g[p].nxt[c];
}
g[p].leaf.push_back(sidx);
}
void build_automaton(){
for (deque<int> q = {0}; q.size(); q.pop_front()){
int v = q.front(), suffix_link = g[v].suffix_link;
if (v) g[v].exit_link = g[suffix_link].leaf.size() ? suffix_link : g[suffix_link].exit_link;
for (int i=0; i<128; i++){
int &nxt = g[v].nxt[i], nxt_sf = v ? g[suffix_link].nxt[i] : 0;
if (nxt == -1) nxt = nxt_sf;
else{
g[nxt].suffix_link = nxt_sf;
q.push_back(nxt);
}
}
}
}
vector<int> get_sindex(int p){
vector<int> a;
for (int v = g[p].leaf.size() ? p : g[p].exit_link; v != -1; v = g[v].exit_link)
for (int j: g[v].leaf)
a.push_back(j);
return a;
}
};
struct BIT {
int sz;
vector<long long> bit;
BIT() {}
BIT(int _sz) {
sz = _sz;
bit.assign(sz + 5, 0);
}
void update(int id, int x) {
for (; id <= sz; id += id & (-id)) {
bit[id] += x;
}
}
long long get(int id) {
long long res = 0LL;
for (; id > 0; id -= id & (-id)) {
res += bit[id];
}
return res;
}
long long get(int l, int r) {
return get(r) - get(l - 1);
}
};
struct Query {
int qL, qR, id;
long long ans;
};
int n, nQ;
string s[102207], t;
int s_size[102207];
vector<int> pos[102207];
int c[102207];
vector<ii> event[102207];
Query qr[102207];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
if (fopen(TASK".INP", "r")) {
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
cin >> n >> nQ;
aho_corasick ac;
for (int i = 0; i < n; ++i) {
cin >> s[i] >> c[i];
ac.insert_string(s[i], i);
s_size[i] = s[i].size();
}
ac.build_automaton();
cin >> t;
int len = t.length();
for (int i = 0, p = 0; i < len; ++i) {
p = ac.g[p].nxt[t[i]];
for (int j : ac.get_sindex(p)) {
pos[j].push_back(i - s_size[j] + 1);
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < (int)pos[i].size(); ++j) {
int l = pos[i][j] + 1, r = pos[i][j] + s_size[i];
event[r].push_back(make_pair(l, c[i]));
}
}
for (int i = 1; i <= nQ; ++i) {
cin >> qr[i].qL >> qr[i].qR;
qr[i].id = i;
}
sort(qr + 1, qr + nQ + 1, [&](Query q1, Query q2) -> bool{
return q1.qR < q2.qR;
});
int x = 0;
BIT myIT(len);
for (int i = 1; i <= nQ; ++i) {
while (x < qr[i].qR) {
++x;
for (auto [l, cost] : event[x]) {
myIT.update(l, cost);
}
}
qr[i].ans = myIT.get(qr[i].qL, qr[i].qR);
}
sort(qr + 1, qr + nQ + 1, [&](Query q1, Query q2) -> bool{
return q1.id < q2.id;
});
for (int i = 1; i <= nQ; ++i) {
cout << qr[i].ans << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIFRBU0sgIiIKCiNkZWZpbmUgaWkgcGFpcjxpbnQsIGludD4KCnN0cnVjdCBhaG9fY29yYXNpY2t7CiAgICBzdHJ1Y3Qgbm9kZXsKICAgICAgICBpbnQgc3VmZml4X2xpbmsgPSAtMSwgZXhpdF9saW5rID0gLTEsIG54dFsxMjhdOwogICAgICAgIHZlY3RvcjxpbnQ+IGxlYWY7CiAgICAgICAgbm9kZSgpIHtmaWxsKG54dCwgbnh0KzEyOCwgLTEpO30KICAgIH07CiAgICB2ZWN0b3I8bm9kZT4gZyA9IHtub2RlKCl9OwogICAgdm9pZCBpbnNlcnRfc3RyaW5nKGNvbnN0IHN0cmluZyAmcywgaW50IHNpZHgpewogICAgICAgIGludCBwID0gMDsKICAgICAgICBmb3IgKGNoYXIgYzogcyl7CiAgICAgICAgICAgIGlmIChnW3BdLm54dFtjXSA9PSAtMSl7CiAgICAgICAgICAgICAgICBnW3BdLm54dFtjXSA9IGcuc2l6ZSgpOwogICAgICAgICAgICAgICAgZy5lbXBsYWNlX2JhY2soKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwID0gZ1twXS5ueHRbY107CiAgICAgICAgfQogICAgICAgIGdbcF0ubGVhZi5wdXNoX2JhY2soc2lkeCk7CiAgICB9CiAgICB2b2lkIGJ1aWxkX2F1dG9tYXRvbigpewogICAgICAgIGZvciAoZGVxdWU8aW50PiBxID0gezB9OyBxLnNpemUoKTsgcS5wb3BfZnJvbnQoKSl7CiAgICAgICAgICAgIGludCB2ID0gcS5mcm9udCgpLCBzdWZmaXhfbGluayA9IGdbdl0uc3VmZml4X2xpbms7CiAgICAgICAgICAgIGlmICh2KSBnW3ZdLmV4aXRfbGluayA9IGdbc3VmZml4X2xpbmtdLmxlYWYuc2l6ZSgpID8gc3VmZml4X2xpbmsgOiBnW3N1ZmZpeF9saW5rXS5leGl0X2xpbms7CiAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTwxMjg7IGkrKyl7CiAgICAgICAgICAgICAgICBpbnQgJm54dCA9IGdbdl0ubnh0W2ldLCBueHRfc2YgPSB2ID8gZ1tzdWZmaXhfbGlua10ubnh0W2ldIDogMDsKICAgICAgICAgICAgICAgIGlmIChueHQgPT0gLTEpIG54dCA9IG54dF9zZjsKICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgZ1tueHRdLnN1ZmZpeF9saW5rID0gbnh0X3NmOwogICAgICAgICAgICAgICAgICAgIHEucHVzaF9iYWNrKG54dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICB2ZWN0b3I8aW50PiBnZXRfc2luZGV4KGludCBwKXsKICAgICAgICB2ZWN0b3I8aW50PiBhOwogICAgICAgIGZvciAoaW50IHYgPSBnW3BdLmxlYWYuc2l6ZSgpID8gcCA6IGdbcF0uZXhpdF9saW5rOyB2ICE9IC0xOyB2ID0gZ1t2XS5leGl0X2xpbmspCiAgICAgICAgICAgIGZvciAoaW50IGo6IGdbdl0ubGVhZikKICAgICAgICAgICAgICAgIGEucHVzaF9iYWNrKGopOwogICAgICAgIHJldHVybiBhOwogICAgfQp9OwoKc3RydWN0IEJJVCB7CgogICAgaW50IHN6OwogICAgdmVjdG9yPGxvbmcgbG9uZz4gYml0OwoKICAgIEJJVCgpIHt9CiAgICBCSVQoaW50IF9zeikgewogICAgICAgIHN6ID0gX3N6OwogICAgICAgIGJpdC5hc3NpZ24oc3ogKyA1LCAwKTsKICAgIH0KCiAgICB2b2lkIHVwZGF0ZShpbnQgaWQsIGludCB4KSB7CiAgICAgICAgZm9yICg7IGlkIDw9IHN6OyBpZCArPSBpZCAmICgtaWQpKSB7CiAgICAgICAgICAgIGJpdFtpZF0gKz0geDsKICAgICAgICB9CiAgICB9CgogICAgbG9uZyBsb25nIGdldChpbnQgaWQpIHsKICAgICAgICBsb25nIGxvbmcgcmVzID0gMExMOwogICAgICAgIGZvciAoOyBpZCA+IDA7IGlkIC09IGlkICYgKC1pZCkpIHsKICAgICAgICAgICAgcmVzICs9IGJpdFtpZF07CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICB9CgogICAgbG9uZyBsb25nIGdldChpbnQgbCwgaW50IHIpIHsKICAgICAgICByZXR1cm4gZ2V0KHIpIC0gZ2V0KGwgLSAxKTsKICAgIH0KfTsKCnN0cnVjdCBRdWVyeSB7CiAgICBpbnQgcUwsIHFSLCBpZDsKCiAgICBsb25nIGxvbmcgYW5zOwp9OwoKaW50IG4sIG5ROwpzdHJpbmcgc1sxMDIyMDddLCB0OwppbnQgc19zaXplWzEwMjIwN107CnZlY3RvcjxpbnQ+IHBvc1sxMDIyMDddOwppbnQgY1sxMDIyMDddOwp2ZWN0b3I8aWk+IGV2ZW50WzEwMjIwN107ClF1ZXJ5IHFyWzEwMjIwN107CgppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CgogICAgaWYgKGZvcGVuKFRBU0siLklOUCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKFRBU0siLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oVEFTSyIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGNpbiA+PiBuID4+IG5ROwoKICAgIGFob19jb3Jhc2ljayBhYzsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGNpbiA+PiBzW2ldID4+IGNbaV07CiAgICAgICAgYWMuaW5zZXJ0X3N0cmluZyhzW2ldLCBpKTsKICAgICAgICBzX3NpemVbaV0gPSBzW2ldLnNpemUoKTsKICAgIH0KICAgIGFjLmJ1aWxkX2F1dG9tYXRvbigpOwoKICAgIGNpbiA+PiB0OwogICAgaW50IGxlbiA9IHQubGVuZ3RoKCk7CgogICAgZm9yIChpbnQgaSA9IDAsIHAgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICBwID0gYWMuZ1twXS5ueHRbdFtpXV07CiAgICAgICAgZm9yIChpbnQgaiA6IGFjLmdldF9zaW5kZXgocCkpIHsKICAgICAgICAgICAgcG9zW2pdLnB1c2hfYmFjayhpIC0gc19zaXplW2pdICsgMSk7CiAgICAgICAgfQogICAgfQoKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgKGludClwb3NbaV0uc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgaW50IGwgPSBwb3NbaV1bal0gKyAxLCByID0gcG9zW2ldW2pdICsgc19zaXplW2ldOwogICAgICAgICAgICBldmVudFtyXS5wdXNoX2JhY2sobWFrZV9wYWlyKGwsIGNbaV0pKTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gblE7ICsraSkgewogICAgICAgIGNpbiA+PiBxcltpXS5xTCA+PiBxcltpXS5xUjsKICAgICAgICBxcltpXS5pZCA9IGk7CiAgICB9CgogICAgc29ydChxciArIDEsIHFyICsgblEgKyAxLCBbJl0oUXVlcnkgcTEsIFF1ZXJ5IHEyKSAtPiBib29sewogICAgICAgIHJldHVybiBxMS5xUiA8IHEyLnFSOwogICAgfSk7CgogICAgaW50IHggPSAwOwogICAgQklUIG15SVQobGVuKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuUTsgKytpKSB7CiAgICAgICAgd2hpbGUgKHggPCBxcltpXS5xUikgewogICAgICAgICAgICArK3g7CiAgICAgICAgICAgIGZvciAoYXV0byBbbCwgY29zdF0gOiBldmVudFt4XSkgewogICAgICAgICAgICAgICAgbXlJVC51cGRhdGUobCwgY29zdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcXJbaV0uYW5zID0gbXlJVC5nZXQocXJbaV0ucUwsIHFyW2ldLnFSKTsKICAgIH0KCiAgICBzb3J0KHFyICsgMSwgcXIgKyBuUSArIDEsIFsmXShRdWVyeSBxMSwgUXVlcnkgcTIpIC0+IGJvb2x7CiAgICAgICAgcmV0dXJuIHExLmlkIDwgcTIuaWQ7CiAgICB9KTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuUTsgKytpKSB7CiAgICAgICAgY291dCA8PCBxcltpXS5hbnMgPDwgIlxuIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=