#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
int dx8[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dy8[] = {1, -1, -1, 0, 1, -1, 0, 1};
int kx8[] = {1, 1, 2, 2, -1, -1, -2, -2};
int ky8[] = {2, -2, 1, -1, 2, -2, 1, -1};
int res[5005];
int dp[5005];
int n, a, b;
int dpcall(int id) {
  if (id >= n) return 0;
  if (dp[id] != -1) return dp[id];
  dp[id] = 2134567891;
  if (res[id]) {
    dp[id] = a + dpcall(id + 1);
    dp[id] = min(dp[id], b + dpcall(id + res[id]));
  } else {
    dp[id] = a + dpcall(id + 1);
  }
  return dp[id];
}
const int M = 5005;
struct data {
  int fc, sc, id;
  bool operator<(const data &a) const {
    if (fc != a.fc) {
      return fc < a.fc;
    }
    return sc < a.sc;
  }
} suffix[M];
int sp[18][M], lcp[M], step;
string s;
void build_suffix_array() {
  for (int i = 0; i < n; i++) sp[0][i] = s[i];
  step = 1;
  memset((suffix), 0, sizeof(suffix));
  for (int i = 1; i <= n; i *= 2) {
    for (int j = 0; j <= n; j++) {
      suffix[j].id = j;
      suffix[j].fc = sp[step - 1][j];
      suffix[j].sc = (i + j) < n ? sp[step - 1][i + j] : -1;
    }
    sort(suffix, suffix + n);
    sp[step][suffix[0].id] = 0;
    for (int k = 1; k < n; k++) {
      if (suffix[k].fc == suffix[k - 1].fc &&
          suffix[k].sc == suffix[k - 1].sc) {
        sp[step][suffix[k].id] = sp[step][suffix[k - 1].id];
      } else {
        sp[step][suffix[k].id] = k;
      }
    }
    step++;
  }
  lcp[0] = 0;
  int fst, scd;
  for (int i = 1; i < n; i++) {
    fst = suffix[i - 1].id;
    scd = suffix[i].id;
    lcp[i] = 0;
    for (int j = step - 1; j >= 0 && fst < n && scd < n; j--) {
      if (sp[j][fst] == sp[j][scd]) {
        lcp[i] += (1 << j);
        fst += (1 << j);
        scd += (1 << j);
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  memset((dp), -1, sizeof(dp));
  cin >> n >> a >> b;
  cin >> s;
  build_suffix_array();
  for (int i = 0; i < n; i++) {
    int ans = 0;
    int mn = 2134567891;
    for (int j = i; j >= 1; j--) {
      mn = min(lcp[j], mn);
      if ((suffix[i].id - suffix[j - 1].id) >= 0) {
        ans = max(ans, min(suffix[i].id - suffix[j - 1].id, mn));
      }
    }
    mn = 2134567891;
    for (int j = i + 1; j < n; j++) {
      mn = min(lcp[j], mn);
      if ((suffix[i].id - suffix[j].id) >= 0) {
        ans = max(ans, min(suffix[i].id - suffix[j].id, mn));
      }
    }
    res[suffix[i].id] = ans;
  }
  cout << dpcall(0) << endl;
  return 0;
}
