# [Codeforces447B]DZY Loves Strings

## 描述 Description

DZY loves collecting special strings which only contain lowercase letters. For each lowercase letter c DZY knows its value wc. For each special string s = s1s2… s|s| (|s| is the length of the string) he represents its value with a function f(s), where $f(s)=sum_{i=1}^{| s |}(w_{s_{i}}*i)$

Now DZY has a string s. He wants to insert k lowercase letters into this string in order to get the largest possible value of the resulting string. Can you help him calculate the largest possible value he could get?

## 输入格式 InputFormat

The first line contains a single string s (1 ≤ |s| ≤ 103).

The second line contains a single integer k (0 ≤ k ≤ 103).

The third line contains twenty-six integers from wa to wz. Each such number is non-negative and doesn’t exceed 1000.

## 输出格式 OutputFormat

Print a single integer — the largest possible value of the resulting string DZY could get.

## 样例输入 SampleInput

abc
3
1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

41

## 数据范围和注释 Hint

In the test sample DZY can obtain “abcbbc”, value = 1·1 + 2·2 + 3·2 + 4·2 + 5·2 + 6·2 = 41.

Codeforces 447B

## 代码 Code

#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int inf=0x7fffffff;
char a[1005];
int w[200];
int i,j,t,n,m,l,r,k,z,y,x;
long long ans=0;
int main()
{
scanf("%s",a);
scanf("%d",&k);
x=0;
for (i=0;i<26;i++) scanf("%d",&t),x=max(x,t),w[i+'a']=t;
for (i=0;i<strlen(a);i++) ans+=(long long)w[a[i]]*(i+1);
for (i=strlen(a)+1;i<=k+strlen(a);i++) ans+=(long long)i*x;
printf("%I64d\n",ans);
return 0;
}