#include <bits/stdc++.h>
using namespace std;
template <typename T>
void vout(T x) {
  cout << x << endl;
  exit(0);
}
long long gcd(long long a, long long b) {
  while (a && b) {
    if (a > b)
      a %= b;
    else
      b %= a;
  }
  return a + b;
}
const long long INF = 1e18;
const int inf = 1e9;
const int mod = 1e9 + 7;
const int N = 1e6 + 1;
int dp[N], n, a, b, p[N];
string s, t;
int brut(string a, string b) {
  int i;
  for (i = 0; i < (int)a.size(); ++i) {
    if (b.find(a.substr(0, i + 1)) == string::npos) return i;
  }
  return i;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> a >> b;
  cin >> s;
  for (int i = 0; i <= n; ++i) dp[i] = inf;
  dp[0] = a;
  for (int i = 0; i < n; ++i) {
    dp[i + 1] = min(dp[i + 1], dp[i] + a);
    t = s.substr(i + 1) + '#' + s.substr(0, i + 1);
    if ((int)t.size()) {
      int res = 0;
      p[0] = 0;
      for (int j = 1; j < (int)t.size(); ++j) {
        int e = p[j - 1];
        while (e > 0 && t[e] != t[j]) e = p[e - 1];
        if (t[e] == t[j]) e++;
        p[j] = e;
      }
      for (int j = n - i - 1; j < (int)t.size(); ++j) res = max(res, p[j]);
      dp[i + res] = min(dp[i + res], dp[i] + b);
    }
  }
  cout << dp[n - 1] << endl;
  return 0;
}
