#include <bits/stdc++.h>
using namespace std;
int dp[5005];
char s[5005], t[5005];
struct SuffixArray {
  const int L;
  string s;
  vector<vector<int> > P;
  vector<pair<pair<int, int>, int> > M;
  SuffixArray(const string &s)
      : L(s.length()), s(s), P(1, vector<int>(L, 0)), M(L) {
    for (int i = 0; i < L; i++) P[0][i] = int(s[i]);
    for (int skip = 1, level = 1; skip < L; skip *= 2, level++) {
      P.push_back(vector<int>(L, 0));
      for (int i = 0; i < L; i++)
        M[i] =
            make_pair(make_pair(P[level - 1][i],
                                i + skip < L ? P[level - 1][i + skip] : -1000),
                      i);
      sort(M.begin(), M.end());
      for (int i = 0; i < L; i++)
        P[level][M[i].second] = (i > 0 && M[i].first == M[i - 1].first)
                                    ? P[level][M[i - 1].second]
                                    : i;
    }
  }
  vector<int> GetSuffixArray() { return P.back(); }
  int LongestCommonPrefix(int i, int j) {
    int len = 0;
    if (i == j) return L - i;
    for (int k = P.size() - 1; k >= 0 && i < L && j < L; k--) {
      if (P[k][i] == P[k][j]) {
        i += 1 << k;
        j += 1 << k;
        len += 1 << k;
      }
    }
    return len;
  }
};
int p[5005];
int n, a, b;
int main() {
  scanf("%d%d%d", &n, &a, &b);
  scanf("%s", s);
  for (int i = 0; i < n; i++) t[i] = s[n - i - 1];
  SuffixArray suffix(t);
  vector<int> v = suffix.GetSuffixArray();
  for (int i = 0; i < n; i++) p[v[i]] = n - i - 1;
  for (int i = 0; i < n; i++) {
    int k = n - i - 1;
    if (i == 0)
      dp[i] = a;
    else
      dp[i] = dp[i - 1] + a;
    for (int j = 0; j < n; j++) {
      if (p[j] >= i) continue;
      int l = suffix.LongestCommonPrefix(n - p[v[k]] - 1, n - p[j] - 1);
      l = min(l, i - p[j]);
      if (i - l >= 0)
        dp[i] = min(dp[i], dp[i - l] + b);
      else
        dp[i] = min(dp[i], b);
    }
  }
  printf("%d\n", dp[n - 1]);
}
