#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 100;
string s;
int f(int id) {
  string t;
  for (int j = id; j < s.size(); j++) {
    t.push_back(s[j]);
  }
  t.push_back('#');
  for (int j = 0; j < id; j++) {
    t.push_back(s[j]);
  }
  int mx = 0;
  vector<int> z(t.size() + 1);
  for (int i = 1, l = 0, r = 0; i < t.size(); i++) {
    if (i <= r) {
      z[i] = min(r - i + 1, z[i - l]);
    }
    while (i + z[i] < t.size() && t[z[i]] == t[i + z[i]]) {
      z[i]++;
    }
    if (i + z[i] - 1 > r) {
      l = i, r = i + z[i] - 1;
    }
  }
  for (int i = t.find('#') + 1; i < t.size(); i++) {
    mx = max(mx, z[i]);
  }
  return mx;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  int n, a, b;
  cin >> n >> a >> b >> s;
  vector<int> maxLen(n);
  for (int i = 1; i < n; i++) {
    maxLen[i] = f(i);
  }
  vector<int> dp(n);
  dp[0] = a;
  for (int i = 1; i < n; i++) {
    dp[i] = dp[i - 1] + a;
    int min = 1e9;
    for (int j = 1; j <= i; j++) {
      int len = maxLen[j];
      if (i <= j + len - 1 && dp[i] > dp[j - 1] + b) {
        dp[i] = dp[j - 1] + b;
      }
    }
  }
  cout << dp.back();
  return 0;
}
