#include <bits/stdc++.h>
template <int xn, int xe>
struct mcf {
  int head[xn], next[xe], to[xe], fl[xe], co[xe], N, E, q[xn], dis[xn], in[xn],
      fa[xn], ent[xn];
  inline void add(int u, int v, int f, int c) {
    next[E] = head[u], to[E] = v, fl[E] = f, co[E] = c, head[u] = E++;
    next[E] = head[v], to[E] = u, fl[E] = 0, co[E] = -c, head[v] = E++;
  }
  void clear(int n) {
    N = n, E = 0;
    for (int i = 0; i < N; i++) head[i] = -1;
  }
  bool spfa() {
    for (int i = 0; i < N; i++) dis[i] = 2100000000, in[i] = 0;
    q[0] = 0;
    dis[0] = 0;
    in[0] = 1;
    int H = -1, T = 0;
    while (H != T) {
      if (++H == xn) H = 0;
      int u = q[H];
      in[u] = 0;
      for (int e = head[u]; ~e; e = next[e])
        if (fl[e] && dis[to[e]] > dis[u] + co[e]) {
          fa[to[e]] = u;
          ent[to[e]] = e;
          dis[to[e]] = dis[u] + co[e];
          if (!in[to[e]]) {
            if (++T == xn) T = 0;
            in[q[T] = to[e]] = 1;
          }
        }
    }
    return dis[N - 1] < 2100000000;
  }
  int operator()() {
    int s = 0;
    while (spfa()) {
      int mc = 2100000000;
      for (int i = N - 1; i; i = fa[i]) mc = std::min(mc, fl[ent[i]]);
      s += mc * dis[N - 1];
      for (int i = N - 1; i; i = fa[i]) fl[ent[i]] -= mc, fl[ent[i] ^ 1] += mc;
    }
    return s;
  }
};
mcf<502, 666666> G;
int N, Q, D, gap[502], K, S;
char a[502], b[502];
bool same(char *l, char *r, char *L, char *R) {
  if (r - l != R - L) return 0;
  for (char *i = l, *j = L; i < r; i++, j++)
    if (*i != *j) return 0;
  return 1;
}
void inc(int l, int r, int w) {
  G.add(l, r + 1, 1, w);
  gap[l]++;
  gap[r + 1]--;
  S += w;
}
int main() {
  scanf("%d%s", &N, a + 1);
  G.clear(N + 2);
  for (scanf("%d", &Q); Q--;) {
    int M = 0, W;
    scanf("%s%d", b + 1, &W);
    while (b[M + 1]) M++;
    for (int i = 1; i <= N - M + 1; i++)
      if (same(a + i, a + M + i, b + 1, b + M + 1)) inc(i, i + M - 1, W);
  }
  scanf("%d", &K);
  for (int i = 2; i <= N; i++) gap[i] += gap[i - 1];
  for (int i = 1; i <= N; i++) G.add(i, i + 1, 1000000 - gap[i] + K, 0);
  G.add(0, 1, 1000000, 0);
  printf("%d\n", S - G());
  return 0;
}
