#include <bits/stdc++.h>
using namespace std;
const int MAX_N = int(1e6) + 10;
struct fenwick {
  int lim;
  long long int *tree;
  fenwick(int _lim) {
    lim = _lim;
    tree = new long long int[lim];
  }
  void init() {
    for (int i = 0; i < lim; i++) {
      tree[i] = 0;
    }
  }
  void update(int x, long long int v) {
    while (x < lim) {
      tree[x] += v;
      x += x & (-x);
    }
  }
  long long int query(int x) {
    long long int ans = 0;
    while (x > 0) {
      ans += tree[x];
      x -= x & (-x);
    }
    return ans;
  }
  int _query(int k) {
    int low = 1;
    int high = 500000;
    int ans = 0;
    int x = k;
    while (low <= high) {
      int mid = low + (high - low) / 2;
      if (query(mid) >= x) {
        ans = mid;
        high = mid - 1;
      } else {
        low = mid + 1;
      }
    }
    return ans;
  }
};
struct z_function {
  string &txt;
  int *z;
  z_function(string &_txt) : txt(_txt) { z = new int[1 + txt.length()]; }
  void cal() {
    z[0] = 0;
    int l = 0;
    int r = 0;
    for (int i = 1; i < txt.length(); i++) {
      if (i > r) {
        l = i;
        r = i;
        while (r < txt.length() && txt[r] == txt[r - l]) {
          r++;
        }
        z[i] = r - l;
        r = r - 1;
      } else {
        if (z[i - l] < r - i + 1)
          z[i] = z[i - l];
        else {
          l = i;
          while (r < txt.length() && txt[r] == txt[r - l]) {
            r++;
          }
          z[i] = r - l;
          r = r - 1;
        }
      }
    }
  }
};
int main() {
  int dp[500005];
  int n, a, b;
  cin >> n >> a >> b;
  string s;
  cin >> s;
  dp[0] = 0;
  for (int i = 1; i <= n; i++) {
    dp[i] = dp[i - 1] + a;
    string _s = "";
    for (int j = i - 1; j >= 0; j--) {
      _s += s[j];
    }
    z_function *zz22 = new z_function(_s);
    zz22->cal();
    for (int j = 1; j < i; j++) {
      int indx = j;
      int indx2 = i - 1 - indx;
      if (zz22->z[indx] != 0) {
        int len = max(indx2, i - 1 - zz22->z[indx]);
        dp[i] = min(dp[i], dp[len + 1] + b);
      }
    }
  }
  cout << dp[n] << "\n";
  return 0;
}
