#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 * 5 + 5;
const int BASE1 = 256, BASE2 = 257, BASE3 = 258;
const int MOD1 = 1e9 + 7, MOD2 = 1e9 + 3, MOD3 = 1e9 + 9;
const int INF = 1e9;
int n, a, b, k;
char str[MAXN];
int T[MAXN];
int z[MAXN];
char pat[MAXN];
void read_input() {
  scanf("%d %d %d", &n, &a, &b);
  scanf("%s", str);
}
void z_function(int len) {
  for (int i = 0; i < len; i++) {
    z[i] = 0;
  }
  for (int i = 1, l = 0, r = 0; i < len; i++) {
    if (i <= r) {
      z[i] = min(z[i - l], r - i + 1);
    }
    while (z[i] + i < len && pat[z[i]] == pat[i + z[i]]) {
      z[i]++;
    }
    if (z[i] + i - 1 > r) {
      r = z[i] + i - 1;
      l = i;
    }
  }
}
int rec(int index) {
  if (index > n) {
    return INF;
  }
  if (index == n) {
    return 0;
  }
  if (T[index]) {
    return T[index];
  }
  int ans = INF;
  int l = 0;
  int from = 0;
  for (int i = index; i < n; i++) {
    pat[l++] = str[i];
  }
  pat[l++] = '#';
  from = l;
  for (int i = 0; i < index; i++) {
    pat[l++] = str[i];
  }
  z_function(l);
  int ind = 0;
  for (int i = from; i < l; i++) {
    ind = max(ind, z[i]);
  }
  for (int i = 0; i < ind; i++) {
    ans = min(ans, rec(index + i + 1) + b);
  }
  ans = min(ans, rec(index + 1) + a);
  return T[index] = ans;
}
void solve() { printf("%d\n", rec(0)); }
int main() {
  read_input();
  solve();
  return 0;
}
