#include <bits/stdc++.h>
using namespace std;
void fre() {
  freopen("c://test//input.in", "r", stdin);
  freopen("c://test//output.out", "w", stdout);
}
template <class T1, class T2>
inline void gmax(T1 &a, T2 b) {
  if (b > a) a = b;
}
template <class T1, class T2>
inline void gmin(T1 &a, T2 b) {
  if (b < a) a = b;
}
const int N = 505, M = 500 * 500 * 2, Z = 1e9 + 7, ms63 = 0x3f3f3f3f;
int casenum, casei;
int id, ST, ED;
int first[N];
int w[M], c[M], cap[M], cost[M], nxt[M];
int f[N];
int pe[N];
bool e[N];
void ins(int x, int y, int cap_, int cost_) {
  id++;
  w[id] = y;
  cap[id] = cap_;
  cost[id] = cost_;
  nxt[id] = first[x];
  first[x] = id;
  id++;
  w[id] = x;
  cap[id] = 0;
  cost[id] = -cost_;
  nxt[id] = first[y];
  first[y] = id;
}
queue<int> q;
void inq(int x, int cost_, int pe_) {
  if (cost_ <= f[x]) return;
  f[x] = cost_;
  pe[x] = pe_;
  if (e[x]) return;
  e[x] = 1;
  q.push(x);
}
bool spfa() {
  memset(f, -1, sizeof(f));
  cap[0] = ms63;
  inq(ST, 0, 0);
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    e[x] = 0;
    for (int z = first[x]; z; z = nxt[z]) {
      if (cap[z]) inq(w[z], f[x] + cost[z], z);
    }
  }
  return f[ED] != -1;
}
int MCMF() {
  int maxflow = 0;
  int mincost = 0;
  while (spfa()) {
    int flow = ms63;
    int x = ED;
    while (x != ST) {
      gmin(flow, cap[pe[x]]);
      x = w[pe[x] ^ 1];
    }
    maxflow += flow;
    mincost += f[ED] * flow;
    x = ED;
    while (x != ST) {
      cap[pe[x]] -= flow;
      cap[pe[x] ^ 1] += flow;
      x = w[pe[x] ^ 1];
    }
  }
  return mincost;
}
int n, m;
char s[N], ss[N];
int main() {
  while (~scanf("%d", &n)) {
    memset(first, 0, sizeof(first));
    id = 1;
    ST = 0;
    ED = n + 1;
    scanf("%s", s + 1);
    scanf("%d", &m);
    for (int i = 1; i <= m; ++i) {
      int v;
      scanf("%s%d", ss, &v);
      int l = strlen(ss);
      for (int i = 1; i + l - 1 <= n; ++i) {
        bool ok = 1;
        for (int j = 0; j < l; ++j)
          if (s[i + j] != ss[j]) {
            ok = 0;
            break;
          }
        if (ok) {
          ins(i, i + l, 1, v);
        }
      }
    }
    int X;
    scanf("%d", &X);
    for (int i = 0; i <= n; ++i) {
      ins(i, i + 1, X, 0);
    }
    printf("%d\n", MCMF());
  }
  return 0;
}
