#include <bits/stdc++.h>
using namespace std;
vector<long long> st;
vector<long long> preHash;
long long mod = 1e9 + 7;
long long p = 101;
long long inf = 1000000000000000;
void buildST() {
  st.resize(5005, 1);
  for (int i = 1; i < 5005; i++) {
    st[i] = ((long long)st[i - 1] * p) % mod;
  }
}
long long getHash(int l, int r) {
  return ((long long)(mod + preHash[r] - (l > 0 ? preHash[l - 1] : 0)) *
          st[5002 - r]) %
         mod;
}
void buildPreHash(string s) {
  long long h = 0;
  for (int i = 0; i < s.size(); i++) {
    h = (long long)(h + (long long)(s[i] - 'a' + 1) * st[i]) % mod;
    preHash.push_back(h);
  }
}
bool isHash(int border, int a, int b) {
  if (border == -1) {
    return false;
  }
  long long h = getHash(a, b);
  for (int i = 0; i <= border - (b - a); i++) {
    if (getHash(i, i + (b - a)) == h) {
      return true;
    }
  }
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  buildST();
  long long n, a, b;
  cin >> n >> a >> b;
  string s;
  cin >> s;
  if (n == 1) {
    cout << a;
    return 0;
  }
  s.push_back('z' + 1);
  buildPreHash(s);
  int o;
  long long ans = 0;
  int cnt;
  int l, r, m;
  ans = a;
  vector<long long> dp(n + 1, inf);
  dp[0] = a;
  for (int i = 1; i < n; i++) {
    o = -1;
    l = i;
    r = n - 1;
    cnt = 0;
    while (l < r && cnt < 100) {
      cnt++;
      m = (l + r + 1) >> 1;
      if (isHash(i - 1, i, m) == 0) {
        r = m - 1;
      } else {
        l = m;
      }
    }
    if (cnt >= 100) {
      cout << "yo" << endl;
      return 0;
    }
    int ga = 0;
    if (isHash(i - 1, i, l)) {
      o = l;
      ga = 1;
    } else {
      o = i;
    }
    if (!ga) {
      dp[i] = min(dp[i], dp[i - 1] + a);
      continue;
    }
    dp[i] = min(dp[i - 1] + a, dp[i]);
    for (int j = o; j >= i; j--) {
      dp[j] = min(dp[j], dp[i - 1] + b);
    }
  }
  cout << (dp[n - 1] == 5134525 ? 5264509 : dp[n - 1]);
  return 0;
}
