#include <bits/stdc++.h>
using namespace std;
void setup()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
int n;
int z[2500], nxt[2500][2500];
string s;
long long a, b, c, d, e, num, last;
long long f[2500][2500];
int main()
{
setup();
cin >> n >> s >> a >> b >> c;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
nxt[i][j] = -1;
f[i][j] = a * (j - i + 1);
}
}
for (int i = 0; i < n; ++i)
{
for (int j = i + 1, l = i, r = i, k = 1; j < n; ++j)
{
z[j - i] = (j <= r ? min(r - j + 1, z[j - l]) : 0);
while (j + z[j - i] < n && s[j + z[j - i]] == s[i + z[j - i]])
{
z[j - i]++;
}
if (j + z[j - i] > r)
{
l = j;
r = j + z[j - i] - 1;
}
while (k <= min(j - i, z[j - i]))
{
nxt[i][i + k - 1] = j;
k++;
}
}
}
for (int len = 0; len < n; ++len)
{
for (int l = 0, r = len, cur_l, cur_r; r < n; ++l, ++r)
{
if (l < r)
{
f[l][r] = min(f[l][r], min(f[l + 1][r], f[l][r - 1]) + a);
}
cur_l = l;
cur_r = r;
num = 1;
while (nxt[cur_l][cur_r] != -1)
{
cur_l = nxt[cur_l][cur_r];
cur_r = cur_l + r - l;
num++;
f[l][cur_r] = min(f[l][cur_r], f[l][r] + b + c * num + a * (cur_r - l + 1 - num * (r - l + 1)));
}
}
}
cout << f[0][n - 1];
return 0;
}