#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using P = pair<int, int>;
constexpr ld EPS = 1e-12;
constexpr int INF = numeric_limits<int>::max() / 2;
constexpr int MOD = 1e9 + 7;
template <typename T>
void printv(const vector<T> &v) {
  int sz = v.size();
  for (int i = 0; i < sz; i++) {
    cout << v[i] << " \n"[i == sz - 1];
  }
}
std::vector<int> z_algorithm(const std::string &s) {
  int sz = s.length();
  std::vector<int> z(sz, 0);
  int i = 1, j = 0;
  while (i < sz) {
    while (i + j < sz && s[j] == s[i + j]) j++;
    z[i] = j;
    if (j == 0) {
      i++;
      continue;
    }
    int k = 1;
    while (i + k < sz && k + z[k] < j) {
      z[i + k] = z[k];
      k++;
    }
    i += k;
    j -= k;
  }
  return z;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int n, a, b;
  cin >> n >> a >> b;
  string s;
  cin >> s;
  s = "$" + s;
  vector<vector<int>> zs(n + 1);
  for (int i = 1; i <= n; i++) {
    zs[i] = z_algorithm(s.substr(i, n + 1 - i));
  }
  vector<ll> dp(n + 1, 1e15);
  dp[0] = 0;
  for (int i = 1; i <= n; i++) {
    dp[i] = min(dp[i], dp[i - 1] + a);
    for (int j = 1; j < i; j++) {
      int len = min(i - j, zs[j][i - j]);
      if (len == 0) continue;
      dp[i + len - 1] = min(dp[i + len - 1], dp[i - 1] + b);
    }
  }
  cout << dp[n] << endl;
}
