#include <bits/stdc++.h>
using namespace std;
int n, a, b;
long long int dp[5010];
bool sub[5010][5010];
char s[5010];
vector<pair<int, int> > _prev;
vector<pair<int, int> > my_hash[1000039 + 10];
bool in_hash(pair<int, int> x) {
  int key = (x.first + x.second) % 1000039;
  for (int i = 0; i < ((int)(my_hash[key].size())); i++)
    if (my_hash[key][i].first == x.first && my_hash[key][i].second == x.second)
      return true;
  return false;
}
void add_hash(pair<int, int> x) {
  int key = (x.first + x.second) % 1000039;
  for (int i = 0; i < ((int)(my_hash[key].size())); i++)
    if (my_hash[key][i].first == x.first && my_hash[key][i].second == x.second)
      return;
  my_hash[key].push_back(x);
}
int main() {
  scanf("%d %d %d", &n, &a, &b);
  scanf("%s", s + 1);
  for (int i = 1; i <= n; i++) {
    pair<int, int> _hash = {0, 0};
    for (int j = i; j <= n; j++) {
      _hash.first = (1LL * _hash.first * 25671 + s[j]) % 666013;
      _hash.second = (1LL * _hash.second * 191 + s[j]) % 1000000007;
      if (in_hash(_hash))
        sub[i][j] = true;
      else
        break;
    }
    _prev.push_back({0, 0});
    for (int j = 0; j < ((int)(_prev.size())); j++) {
      _prev[j].first = (1LL * _prev[j].first * 25671 + s[i]) % 666013;
      _prev[j].second = (1LL * _prev[j].second * 191 + s[i]) % 1000000007;
      add_hash(_prev[j]);
    }
  }
  for (int i = 0; i <= n; i++) dp[i] = 1e18;
  dp[0] = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = i; j <= n; j++)
      if (sub[i][j]) dp[j] = min(dp[j], dp[i - 1] + b);
    dp[i] = min(dp[i], dp[i - 1] + a);
  }
  printf("%lld", dp[n]);
  return 0;
}
