#include <bits/stdc++.h>
using namespace std;
template <class T>
T gcd(T a, T b) {
  return (b != 0 ? gcd<T>(b, a % b) : a);
}
template <class T>
T lcm(T a, T b) {
  return (a / gcd<T>(a, b) * b);
}
template <class T>
inline bool read(T &x) {
  int c = getchar();
  int sgn = 1;
  while (~c && c < '0' || c > '9') {
    if (c == '-') sgn = -1;
    c = getchar();
  }
  for (x = 0; ~c && '0' <= c && c <= '9'; c = getchar()) x = x * 10 + c - '0';
  x *= sgn;
  return ~c;
}
const int INF = 2000000009;
const int MX = 5005;
const double EPS = 1e-9;
const int MOD = 1000000007;
class Automata {
 public:
  struct data {
    int link, len;
    int next[26];
    data() {}
    data(int link, int len) : link(link), len(len) {}
  };
  data *node;
  int num, last;
  void reset() {
    num = 1, last = 0;
    node[0].link = -1;
    node[0].len = 0;
    memset(node[0].next, 0, sizeof(node[0].next));
  }
  Automata() {}
  Automata(int mx_len) {
    mx_len += 7;
    mx_len *= 2;
    node = new data[mx_len];
    reset();
  }
  int addLetter(char ch) {
    int cur = num++;
    int let = ch - 'a';
    int p = last;
    node[cur].len = node[last].len + 1;
    memset(node[cur].next, 0, sizeof(node[cur].next));
    for (p = last; p != -1 && !node[p].next[let]; p = node[p].link)
      node[p].next[let] = cur;
    if (p == -1)
      node[cur].link = 0;
    else {
      int q = node[p].next[let];
      if (node[p].len + 1 == node[q].len)
        node[cur].link = q;
      else {
        int clone = num++;
        node[clone] = node[q];
        node[clone].len = node[p].len + 1;
        for (; p != -1 && node[p].next[let] == q; p = node[p].link)
          node[p].next[let] = clone;
        node[q].link = node[cur].link = clone;
      }
    }
    return last = cur;
  }
};
int n, a, b, dp[MX], lim[MX];
char s[MX];
int rec(int pos) {
  if (pos == n) return 0;
  if (dp[pos] != -1) return dp[pos];
  dp[pos] = a + rec(pos + 1);
  for (int i = pos; i < lim[pos]; i++) dp[pos] = min(dp[pos], b + rec(i + 1));
  return dp[pos];
}
int main() {
  n = ({
    int a;
    read(a);
    a;
  }),
  a = ({
    int a;
    read(a);
    a;
  }),
  b = ({
    int a;
    read(a);
    a;
  });
  scanf("%s", s);
  Automata A(n);
  for (int i = 0; i < n; i++) {
    int j, cur = 0;
    for (j = i; j < n; j++) {
      if (A.node[cur].next[s[j] - 'a'])
        cur = A.node[cur].next[s[j] - 'a'];
      else
        break;
    }
    lim[i] = j;
    A.addLetter(s[i]);
  }
  memset(dp, -1, sizeof(dp));
  printf("%d\n", rec(0));
  return 0;
}
