#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5005;
const long long key1 = 29, key2 = 31;
const long long mod1 = 1e9 + 7, mod2 = 1e9 + 9;
int n;
int a, b;
string s;
int dp[MAXN];
long long p1[MAXN], p2[MAXN];
pair<long long, long long> h[MAXN];
int length = 0;
pair<pair<int, int>, int> arr[MAXN * MAXN / 2 + MAXN];
bool checkIn(pair<int, int> x) {
  int l, r, mid;
  l = 0;
  r = length - 1;
  while (l + 1 < r) {
    mid = (l + r) / 2;
    if (arr[mid].first <= x)
      l = mid;
    else
      r = mid - 1;
  }
  if (arr[l].first == x) return true;
  if (arr[r].first == x) return true;
  return false;
}
int value(pair<int, int> x) {
  int l, r, mid;
  l = 0;
  r = length - 1;
  while (l + 1 < r) {
    mid = (l + r) / 2;
    if (arr[mid].first < x)
      l = mid;
    else if (arr[mid].first == x)
      r = mid;
    else
      r = mid - 1;
  }
  if (arr[l].first == x) return arr[l].second;
  if (arr[r].first == x) return arr[r].second;
}
void Init() {
  h[0] = {s[0] - 'a' + 1, s[0] - 'a' + 1};
  for (int i = 1; i < n; i++) {
    h[i].first = (h[i - 1].first * key1 + (s[i] - 'a' + 1)) % mod1;
    h[i].second = (h[i - 1].second * key2 + (s[i] - 'a' + 1)) % mod2;
  }
  p1[0] = 1;
  p2[0] = 1;
  for (int i = 1; i <= n; i++) {
    p1[i] = (p1[i - 1] * key1) % mod1;
    p2[i] = (p2[i - 1] * key2) % mod2;
  }
}
pair<long long, long long> getHash(int l, int r) {
  pair<long long, long long> output;
  output = h[r];
  if (l != 0) {
    output.first =
        (output.first - (h[l - 1].first * p1[r - l + 1]) % mod1 + mod1) % mod1;
    output.second =
        (output.second - (h[l - 1].second * p2[r - l + 1]) % mod2 + mod2) %
        mod2;
  }
  return output;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int l, r, mid;
  cin >> n >> a >> b;
  cin >> s;
  Init();
  for (int i = n - 1; i >= 0; i--) {
    for (int len = 1; len <= n / 2 + 1; len++) {
      if (i + len - 1 >= n) break;
      arr[length] = {getHash(i, i + len - 1), i + len - 1};
      length++;
    }
  }
  sort(arr, arr + length);
  dp[0] = a;
  for (int i = 1; i < n; i++) {
    dp[i] = dp[i - 1] + a;
    if (value(getHash(i, i)) < i) {
      l = 1;
      r = i;
      while (l + 1 < r) {
        mid = (l + r) / 2;
        if (checkIn(getHash(mid, i)) == true && value(getHash(mid, i)) < mid)
          r = mid;
        else
          l = mid + 1;
      }
      if (checkIn(getHash(l, i)) == true && value(getHash(l, i)) < l)
        dp[i] = min(dp[l - 1] + b, dp[i]);
      if (checkIn(getHash(r, i)) == true && value(getHash(r, i)) < r)
        dp[i] = min(dp[r - 1] + b, dp[i]);
    }
  }
  cout << dp[n - 1] << '\n';
}
