## Algorithm

C. LionAge II
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Vasya plays the LionAge II. He was bored of playing with a stupid computer, so he installed this popular MMORPG, to fight with his friends. Vasya came up with the name of his character — non-empty string s, consisting of a lowercase Latin letters. However, in order not to put up a front of friends, Vasya has decided to change no more than k letters of the character name so that the new name sounded as good as possible. Euphony of the line is defined as follows: for each pair of adjacent letters x and y (x immediately precedes y) the bonus c(x, y) is added to the result. Your task is to determine what the greatest Euphony can be obtained by changing at most k letters in the name of the Vasya's character.

Input

The first line contains character's name s and an integer number k (0 ≤ k ≤ 100). The length of the nonempty string s does not exceed 100. The second line contains an integer number n (0 ≤ n ≤ 676) — amount of pairs of letters, giving bonus to the euphony. The next n lines contain description of these pairs «x y c», which means that sequence xy gives bonus c (x, y — lowercase Latin letters,  - 1000 ≤ c ≤ 1000). It is guaranteed that no pair x y mentioned twice in the input data.

Output

Output the only number — maximum possible euphony оf the new character's name.

Examples
input
Copy
`winner 44s e 7o s 8l o 13o o 8`
output
Copy
`36`
input
Copy
`abcdef 15a b -10b c 5c d 5d e 5e f 5`
output
Copy
`20`
Note

In the first example the most euphony name will be looser. It is easy to calculate that its euphony is 36.

## Code Examples

### #1 Code Example with C++ Programming

```Code - C++ Programming```

``````#include <bits/stdc++.h>

using namespace std;

string s;
int k, n, bn[27][27], dp[101][27][101];

int rec(int idx, int prv, int cur) {
if(idx == s.length())
return 0;

int &ret = dp[idx][prv][cur];
if(ret != -1e9)
return ret;

ret = max(ret, rec(idx + 1, s[idx] - 'a', cur) + bn[prv][s[idx] - 'a']);
for(int i = 0; cur < k && i < 26; ++i)
ret = max(ret, rec(idx + 1, i, cur + 1) + bn[prv][i]);

return ret;
}

void build_path(int idx, int prv, int cur) {
if(idx == s.length())
return;

int opt = rec(idx, prv, cur);

if(opt == rec(idx + 1, s[idx] - 'a', cur) + bn[prv][s[idx] - 'a']) {
cout << s[idx];
build_path(idx + 1, s[idx] - 'a', cur);
return;
}

for(int i = 0; cur < k && i < 26; ++i) {
if(opt == rec(idx + 1, i, cur + 1) + bn[prv][i]) {
cout << char(i + 'a');
build_path(idx + 1, i, cur + 1);
return;
}
}
}

int main() {
cin >> s >> k;
cin >> n;

for(int i = 0; i < n; ++i) {
char a, b;
int c;
cin >> a >> b >> c;
bn[a - 'a'][b -'a'] = c;
}

for(int i = 0; i < 101; ++i)
for(int j = 0; j < 27; ++j)
for(int k = 0; k < 101; ++k)
dp[i][j][k] = -1e9;
cout << rec(0, 26, 0) << endl;

return 0;
}``````
Copy The Code &

Input

cmd
winner 4
4
s e 7
o s 8
l o 13
o o 8

Output

cmd
36