#include <bits/stdc++.h>
using namespace std;
void preKMP(string pattern, int64_t f[]) {
  int64_t m = pattern.length(), k;
  f[0] = -1;
  for (int64_t i = 1; i < m; i++) {
    k = f[i - 1];
    while (k >= 0) {
      if (pattern[k] == pattern[i - 1])
        break;
      else
        k = f[k];
    }
    f[i] = k + 1;
  }
}
bool KMP(string pattern, string target) {
  int64_t m = pattern.length();
  int64_t n = target.length();
  int64_t f[m];
  preKMP(pattern, f);
  int64_t i = 0;
  int64_t k = 0;
  while (i < n) {
    if (k == -1) {
      i++;
      k = 0;
    } else if (target[i] == pattern[k]) {
      i++;
      k++;
      if (k == m) return 1;
    } else
      k = f[k];
  }
  return 0;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int64_t n, a, b;
  cin >> n >> a >> b;
  string s;
  cin >> s;
  int64_t dp[5005];
  memset(dp, 0, sizeof(dp));
  dp[0] = a;
  for (int64_t x = 1; x < n; x++) {
    int64_t temp1 = dp[x - 1] + a;
    int64_t temp2 = INT_MAX;
    int64_t low = 0;
    int64_t high = x;
    int64_t mid;
    while ((high - low) > 1) {
      mid = (low + high) / 2;
      string pat = "";
      string text = "";
      for (int64_t i = 0; i <= mid; i++) {
        text += s[i];
      }
      for (int64_t i = mid + 1; i <= x; i++) {
        pat += s[i];
      }
      if (KMP(pat, text)) {
        high = mid;
      } else {
        low = mid;
      }
    }
    string patlow = "";
    string textlow = "";
    for (int64_t i = 0; i <= low; i++) {
      textlow += s[i];
    }
    for (int64_t i = low + 1; i <= x; i++) {
      patlow += s[i];
    }
    if (KMP(patlow, textlow)) {
      if (low < x) {
        temp2 = dp[low] + b;
      }
    } else {
      if (high < x) {
        temp2 = dp[high] + b;
      }
    }
    dp[x] = min(temp1, temp2);
  }
  cout << dp[n - 1] << endl;
}
