#include <iostream>
#include <cstring>
using namespace std;
int dp();
char ch[2010];
int d[2010][2010];
int m, n;
int cost_add['z'+2];
int cost_sub['z'+2];
int main()
{
while(cin >> n >> m)
{
cin >> (ch+1);
for(int i = 1; i <= n; i++)
{
char c;
cin >> c;
cin >> cost_add[c] >> cost_sub[c];
}
cout << dp() << '\n';
}
}
int dp()
{
int i = 1;
int j = m;
memset(d, 0, sizeof(d));
for(int i = m; i >= 1; i--)
for(int j = i; j<= m; j++)
{
if(ch[i] == ch[j])
d[i][j] = d[i+1][j-1];
else
{
int t1, t2;
t1 = d[i+1][j] + min(cost_add[ ch[i] ], cost_sub[ ch[i] ]);
t2 = d[i][j-1] + min(cost_add[ ch[j] ], cost_sub[ ch[j] ]);
d[i][j] = min(t1, t2);
}
}
return d[1][m];
}