#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>

using namespace std;

struct Osoba
{
	int kasa;	
	int kasaPoEpokach;
	int liczbaEpok;
};

struct Stan
{
	int value;
	int nrCyklu;
	int cyklMinValue;

	int suml;
	int sumr;
	int minl;
    int minr;
};

struct Cykl
{
	int value;	
	int first;
	int count;
	
};

int n;
int m;

Stan  stany[1000001];
Osoba osoby[1000001];
Cykl  cykle[1000001];
int   finao[1000001];
int   finaw[1000001];
int   finas[1000001];
int fi;

int mod(int a, int b)
{
	return (a%b + b) % b;
}

int main()
{
	scanf("%d", &n);
	for (int i = 0; i < n; ++i)
	{
		scanf("%d", &osoby[i].kasa);
	}
	scanf("%d", &m);
	scanf("\n");
	char c;
	for (int i = 0; i < m; ++i)
	{		
		scanf("%c", &c);
		stany[i].value = c == 'W' ? 1 : -1;
	}
	//
	int nr = 0;
	for (int i = 0; i < m; ++i)
	{
		if (stany[i].nrCyklu == 0)
		{
			++nr;
			int j     = i;			
			int val   = 0;
			cykle[nr].first = i;

			while (stany[j].nrCyklu == 0)
			{
				stany[j].nrCyklu = nr;
				cykle[nr].value += stany[j].value;		
				cykle[nr].count++;

				j = (j + n) % m;
			}
		}
	}
	// oblczenia dla cykli
	for (int i = 1; i <= nr; ++i)
	{
		int j = cykle[i].first;
		int s = 0;
		int minv = 0;
		do
		{
			s += stany[j].value;
			stany[j].suml = s;
			stany[j].minl = minv;
			minv = min(minv, s);
			j = (j + n) % m;
		} while (cykle[i].first != j);

		int k = mod((cykle[i].first - n) , m);
		j    = k;
		s    = 0;
		minv = 0;
		do
		{
			s += stany[j].value;
			stany[j].sumr = s;
			stany[j].minr = minv;
			minv = min(minv, stany[j].suml);

			j = mod((j - n) , m);
		} while (j != k);
	}
	// obliczenia dla stanów
	for (int i = 0; i < m; ++i)
	{
		int zl = stany[i].sumr + stany[i].minl;
		int zp = -(stany[i].suml - stany[i].value) + stany[i].minr;
		stany[i].cyklMinValue = min(zl, zp);
	}
	//
	bool isInfinite = true;

	for (int i = 1; i <= nr; ++i)
	{
		if (cykle[i].value < 0)
		{
			isInfinite = false;
		}
	}

	for (int i = 0; i < n; ++i)
	{
		int k = i % m;

		if (osoby[i].kasa + stany[k].cyklMinValue < 1)
		{
			isInfinite = false;
		}
	}

	if (isInfinite == true)
	{
		printf("-1");
	}
	else
	{
		for (int i = 0; i < n; ++i)
		{
			int k = i % m;
			int got = osoby[i].kasa + stany[k].cyklMinValue;
			int cv = cykle[stany[k].nrCyklu].value;
			if (got > 0)
			{
				if (cv < 0)
				{
					osoby[i].liczbaEpok = got / (-cv);
					if (got % (-cv) > 0)
					{
						if ((-cv) < -(stany[k].cyklMinValue))
						{
							osoby[i].liczbaEpok++;
						}
					}

					osoby[i].kasaPoEpokach = osoby[i].kasa + osoby[i].liczbaEpok * cv;
				}
				else
				{
					osoby[i].liczbaEpok = -1;
					osoby[i].kasaPoEpokach = -1 ;
				}
			}
			else
			{
				osoby[i].kasaPoEpokach = osoby[i].kasa;
			}
		}

		// min epok

		int mine = 2000000;
		for (int i = 0; i < n; ++i)
		{
			if (osoby[i].liczbaEpok > -1)
			{
				mine = min(mine, osoby[i].liczbaEpok);
			}
		}

		int last = 0;
		for (int i = 0; i < n; ++i)
		{
			last++;
			if (osoby[i].liczbaEpok == mine)
			{
				finaw[fi]   = last;
				finas[fi]   = i % m;
				finao[fi++] = i;	
				last = 0;
			}
		}

		unsigned long long int lln = n;
		unsigned long long int lmine = mine;
		unsigned long long int lcount = cykle[1].count;
		unsigned long long int wynik1 = lmine * lcount * lln;
		unsigned long long int wynik2 = 0;


		int cu = -1;

		while (true)
		{
			++cu;
			if (cu >= fi)
			{
				wynik2 += last;
			}

			cu = (cu % fi);
			wynik2 += finaw[cu];
			osoby[finao[cu]].kasaPoEpokach += stany[finas[cu]].value;
			finas[cu] = (finas[cu] + n) % m;
			if (osoby[finao[cu]].kasaPoEpokach == 0)
			{
				break;
			}
		}




		printf("%llu", wynik1 + wynik2);
	}

	return 0;
}