#include <bits/stdc++.h>
using namespace std;
const int N = 5005;
int dp[N];
char s[N];
int maxLen[N];
int z[N][N];
void makeZ(int stInd, int n) {
  int L = 0, R = 0;
  for (int i = stInd + 1; i < n; ++i) {
    int ind = i - stInd;
    if (R < ind) {
      L = R = ind;
      while (stInd + R < n && s[stInd + R] == s[stInd + R - L]) {
        ++R;
      }
      z[stInd][i] = R - L;
      --R;
    } else {
      int k = ind - L;
      if (z[stInd][k + stInd] < R - ind + 1) {
        z[stInd][i] = z[stInd][k + stInd];
      } else {
        L = ind;
        while (stInd + R < n && s[stInd + R] == s[stInd + R - L]) {
          ++R;
        }
        z[stInd][i] = R - L;
        --R;
      }
    }
  }
}
int solveDp(int ind, int n, int a, int b) {
  if (ind == n) {
    return 0;
  }
  int &ret = dp[ind];
  if (ret != -1) {
    return ret;
  }
  ret = a + solveDp(ind + 1, n, a, b);
  int len = maxLen[ind];
  for (int i = 0; i < len; ++i) {
    ret = min(ret, solveDp(ind + i + 1, n, a, b) + b);
  }
  return ret;
}
void solve() {
  int n, a, b;
  scanf("%d %d %d", &n, &a, &b);
  scanf("%s", s);
  memset(dp, -1, sizeof(dp));
  for (int i = 0; i < n; ++i) {
    makeZ(i, n);
  }
  for (int i = 1; i < n; ++i) {
    for (int j = 0; j < i; ++j) {
      int g = z[j][i];
      g = min(i - j, g);
      maxLen[i] = max(maxLen[i], g);
    }
  }
  printf("%d\n", solveDp(0, n, a, b));
}
int main() { solve(); }
