#include <bits/stdc++.h>
using namespace std;
pair<long long, long long> operator+(const pair<long long, long long> &a,
                                     const pair<long long, long long> &b) {
  return pair<long long, long long>(a.first + b.first, a.second + b.second);
}
pair<long long, long long> operator-(const pair<long long, long long> &a,
                                     const pair<long long, long long> &b) {
  return pair<long long, long long>(a.first - b.first, a.second - b.second);
}
pair<long long, long long> operator*(const pair<long long, long long> &a,
                                     const pair<long long, long long> &b) {
  return pair<long long, long long>(a.first * b.first, a.second * b.second);
}
pair<long long, long long> operator/(const pair<long long, long long> &a,
                                     const pair<long long, long long> &b) {
  return pair<long long, long long>(a.first / b.first, a.second / b.second);
}
pair<long long, long long> operator%(const pair<long long, long long> &a,
                                     const pair<long long, long long> &b) {
  return pair<long long, long long>(a.first % b.first, a.second % b.second);
}
const int maxn = 5100;
bool ex[maxn][maxn];
int dp[maxn];
set<int> ss[maxn];
vector<bool> vv[2];
const pair<long long, long long> mod = {500001361, 500000003};
const pair<long long, long long> base = {29, 31};
pair<long long, long long> p[maxn];
pair<long long, long long> h[maxn];
int n;
pair<long long, long long> getHash(int a, int b) {
  return ((((h[b + 1] - h[a]) * p[n - a]) % mod + mod) % mod);
}
int main() {
  ios_base::sync_with_stdio(0);
  int a, b;
  string s;
  cin >> n >> a >> b >> s;
  p[0] = {1, 1};
  for (int i = 1; i < maxn; i++) {
    p[i] = (p[i - 1] * base) % mod;
  }
  h[0] = {0, 0};
  for (int i = 1; i <= n; i++) {
    pair<long long, long long> x =
        pair<long long, long long>(s[i - 1] - 'a', s[i - 1] - 'a');
    h[i] = (h[i - 1] + x * p[i]) % mod;
  }
  vv[0].resize((1 << 29));
  vv[1].resize((1 << 29));
  vector<pair<long long, long long> > val;
  for (int d = 0; d < n; d++) {
    val.clear();
    for (int i = 0; i + d < n; i++) {
      int j = i + d;
      pair<long long, long long> hh = getHash(i, j);
      if (vv[0][hh.first] && vv[1][hh.second]) {
        ex[i][j] = true;
      }
      if (i - d >= 0) {
        int k = i - d;
        pair<long long, long long> hh = getHash(k, i);
        val.push_back(hh);
        vv[0][hh.first] = true;
        vv[1][hh.second] = true;
      }
    }
    for (pair<long long, long long> b : val) {
      vv[0][b.first] = false;
      vv[1][b.second] = false;
    }
  }
  dp[0] = 0;
  for (int i = 1; i <= n; i++) {
    dp[i] = a + dp[i - 1];
    for (int j = 0; j < i; j++) {
      if (ex[j][i - 1]) {
        dp[i] = min(dp[i], dp[j] + b);
      }
    }
  }
  cout << dp[n] << "\n";
  return 0;
}
