//Lower bound: first element that is greater-or-equal. //Upper bound: first element that is strictly greater. #include #include #include #include #include #include #include #include #include #include #include #define INF_MAX 2147483647 #define INF_MIN -2147483647 #define INF_LL 9223372036854775807LL #define INF 2000000000 #define PI acos(-1.0) #define inf INT_MAX #define llu unsigned long long int #define all(v) v.begin(),v.end() #define pb push_back #define mp make_pair #define F first #define S second #define si(n) scanf("%d",&n) #define slli(n) scanf("%lld",&n); #define ss(n) scanf("%s",n); //the primes for string hashing //#define M 1000000009 //#define p 999983 //#define pinverse 943912055 //hash --> A[i]=sum(j=1..i)(a[i]*p^i)%M using namespace std; typedef long long int LL; /* long long int mmax(long long int a , long long int b){ if(a>b) return a; return b; } typedef struct node{ int a; }node; vector primes; int is_prime[1000010]; void seive(){ for(int i=0;i<=1000005;i++) is_prime[i] = 1; is_prime[1] = 0; is_prime[0] = 0; for(long long int j=2;j<=1000000;j++){ if(is_prime[j]==1){ primes.push_back(j); for(long long int k=(j*j);k<=1000000;k+=j) is_prime[k] = 0; } } } //int prime(long long int x){if(x==1)return 0;if(x<=3)return 1;if(x%6==1||x%6==5){long long int y=sqrt(x),i;for(i=2;i<=y;i++)if(x%i==0)return 0;return 1;} return 0;} //long long int fastpow(long long int a, long long int b,long long int m){long long int r = 1;while (b > 0){if (b % 2 == 1)r = (r * a) % m;b = b >> 1;a = (a * a) % m;}return r;} //long long int gcd(long long int m, long long int n){if(n == 0) return m;return gcd(n, m % n);} int compare(const void *a , const void *b){ struct node *x,*y; x = (struct node *)a; y = (struct node *)b; return 1; } */ int h[30] , len; string ip; int main() { for(int i=1;i<=26;i++) si(h[i]); cin >> ip; int block_height = 0; len = ip.length(); for(int i=0;i