#include <bits/stdc++.h>   using namespace std;   void read(int &x) {     int v = 0, f = 1;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = v * 10 + c -  0 ;     while (isdigit(c = getchar())) v = v * 10 + c -  0 ;     x = v * f;   }   void read(long long &x) {     long long v = 0ll, f = 1ll;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = v * 10 + c -  0 ;     while (isdigit(c = getchar())) v = v * 10 + c -  0 ;     x = v * f;   }   void readc(char &x) {     char c;     while ((c = getchar()) ==    )       ;     x = c;   }   void writes(string s) { puts(s.c_str()); }   void writeln() { writes(  ); }   void writei(int x) {     if (x < 0) {       putchar( - );       x = abs(x);     }     if (!x) putchar( 0 );     char a[25];     int top = 0;     while (x) {       a[++top] = (x % 10) +  0 ;       x /= 10;     }     while (top) {       putchar(a[top]);       top--;     }   }   void writell(long long x) {     if (x < 0) {       putchar( - );       x = abs(x);     }     if (!x) putchar( 0 );     char a[25];     int top = 0;     while (x) {       a[++top] = (x % 10) +  0 ;       x /= 10;     }     while (top) {       putchar(a[top]);       top--;     }   }   inline long long inc(int &x) { return ++x; }   inline long long inc(long long &x) { return ++x; }   inline long long inc(int &x, long long y) { return x += y; }   inline long long inc(long long &x, long long y) { return x += y; }   inline double inc(double &x, double y) { return x += y; }   inline long long dec(int &x) { return --x; }   inline long long dec(long long &x) { return --x; }   inline long long dec(int &x, long long y) { return x -= y; }   inline long long dec(long long &x, long long y) { return x -= y; }   inline double dec(double &x, double y) { return x -= y; }   inline long long mul(int &x) { return x = ((long long)x) * x; }   inline long long mul(long long &x) { return x = x * x; }   inline long long mul(int &x, long long y) { return x *= y; }   inline long long mul(long long &x, long long y) { return x *= y; }   inline double mul(double &x, double y) { return x *= y; }   inline long long divi(const int &x) {     long long ans, l, r, mid;     ans = 0;     l = 0;     r = 0x3fffffff;     while (l < r) {       mid = (l + r) / 2;       if (mid * mid <= x) {         ans = mid;         l = mid + 1;       } else         r = mid;     }     return ans;   }   inline long long divi(const long long &x) {     long long ans, l, r, mid;     ans = 0;     l = 0;     r = 0x3fffffff;     while (l < r) {       mid = (l + r) / 2;       if (mid * mid <= x) {         ans = mid;         l = mid + 1;       } else         r = mid;     }     return ans;   }   inline long long divi(int &x, long long y) { return x /= y; }   inline long long divi(long long &x, long long y) { return x /= y; }   inline double divi(double &x, double y) { return x /= y; }   inline long long mod(int &x, long long y) { return x %= y; }   inline long long mod(long long &x, long long y) { return x %= y; }   long long n, m, i, j, a[7], b[7], l[100005], ans, f, s;   string st;   int main() {     ios_base::sync_with_stdio(false);     ;     cin >> n;     if ((1) <= ((n)))       for (((i)) = (1); ((i)) <= ((n)); ((i))++) cin >> l[i];     cin >> st;     st =     + st;     if ((1) <= ((n)))       for (((i)) = (1); ((i)) <= ((n)); ((i))++) {         if (st[i] ==  G ) {           ans += l[i];           a[2] += l[i] * 2;           a[5] = 0x1bbbbbbbbbbbbbbbll;         }         if (st[i] ==  W ) {           ans += l[i];           a[1] += l[i] * 2;           a[3] = 0x1bbbbbbbbbbbbbbbll;         }         if (st[i] ==  L ) {           ans += l[i];         }         if ((1) <= ((5)))           for (((j)) = (1); ((j)) <= ((5)); ((j))++) {             s = min(l[i], a[j]);             l[i] -= s;             a[j] -= s;             ans += s * j;           }       }     cout << ans << endl;     return 0;   }