#include <stdio.h>

long NN,mm,NWD_NWD;
long long N,m,NWD_N_m;
int kasa[1000003];
int wygrane[1000003];
char xx;

//int kasa_stan[1000003];

int roznica[1000003];
int ujemne[1000003];

long NWD(long a,long b)
{
long pom,modul;
if (b>a)  { pom=a; a=b; b=pom; }
pom=b;
modul = a % b;
while (modul>0)
	{
	a=b; b=modul; pom=modul;
	modul=a%b;
	}
return pom;
}




int main()
{
scanf("%ld",&NN);
N=NN;
for (int i=1; i<=N; i++) scanf("%ld",&kasa[i]);
scanf("%ld\n",&mm);
m=mm;
for (int i=1; i<=m; i++) 
	{
	scanf("%c",&xx);
	if (xx=='W') wygrane[i]=1;
	else wygrane[i]=-1;
	}

///////////////////////////////////////////////////////////*/
/*N=6; kasa[1]=5; kasa[2]=2; kasa[3]=7; kasa[4]=6; kasa[5]=3; kasa[6]=2;
m=15; wygrane[1]=1; wygrane[2]=1; wygrane[3]=-1; wygrane[4]=-1; wygrane[5]=-1;
wygrane[6]=1; wygrane[7]=1; wygrane[8]=-1; wygrane[9]=-1; wygrane[10]=-1;
wygrane[11]=1; wygrane[12]=1; wygrane[13]=1; wygrane[14]=-1; wygrane[15]=-1;
///////////////////////////////////////////////////////////*/
/*N=9; kasa[1]=2; kasa[2]=5; kasa[3]=7; kasa[4]=4; kasa[5]=2; kasa[6]=6; kasa[7]=9; kasa[8]=7; kasa[9]=5;
m=5; wygrane[1]=1; wygrane[2]=-1; wygrane[3]=1; wygrane[4]=-1; wygrane[5]=1;
///////////////////////////////////////////////////////////*/
/*N=15; kasa[1]=2; kasa[2]=65; kasa[3]=43; kasa[4]=65; kasa[5]=76; kasa[6]=34; kasa[7]=54; kasa[8]=76; kasa[9]=32; kasa[10]=54;
 kasa[11]=34; kasa[12]=65; kasa[13]=43; kasa[14]=56; kasa[15]=75;
m=9; wygrane[1]=-1; wygrane[2]=-1; wygrane[3]=1; wygrane[4]=-1; wygrane[5]=-1;
wygrane[6]=1; wygrane[7]=1; wygrane[8]=-1; wygrane[9]=1;
///////////////////////////////////////////////////////////*/
/*N=15; kasa[1]=102; kasa[2]=65; kasa[3]=43; kasa[4]=65; kasa[5]=76; kasa[6]=34; kasa[7]=54; kasa[8]=76; kasa[9]=32; kasa[10]=54;
 kasa[11]=34; kasa[12]=65; kasa[13]=43; kasa[14]=56; kasa[15]=75;
m=9; wygrane[1]=-1; wygrane[2]=-1; wygrane[3]=1; wygrane[4]=-1; wygrane[5]=-1;
wygrane[6]=1; wygrane[7]=1; wygrane[8]=-1; wygrane[9]=1;
///////////////////////////////////////////////////////////*/
/*N=10; kasa[1]=10; kasa[2]=10; kasa[3]=10; kasa[4]=10; kasa[5]=10; kasa[6]=10; kasa[7]=10; kasa[8]=10; kasa[9]=10; kasa[10]=9;
m=11; wygrane[1]=-1; wygrane[2]=-1; wygrane[3]=-1; wygrane[4]=-1; wygrane[5]=-1;
wygrane[6]=-1; wygrane[7]=-1; wygrane[8]=-1; wygrane[9]=-1; wygrane[10]=-1; wygrane[11]=1;
///////////////////////////////////////////////////////////*/

/*
for (int i=1; i<=N; i++) kasa_stan[i]=kasa[i];

int wsk_wygrane=0, wsk_kasa=0,stop=0;
long CYKL,licznik=0;

CYKL = N*m/NWD(N,m);

for (long i=1; i<=CYKL; i++)
	{
	wsk_wygrane++; wsk_kasa++; licznik++;
	if (wsk_wygrane>m) wsk_wygrane=1;
	if (wsk_kasa>N) wsk_kasa=1;
	kasa[wsk_kasa]+=wygrane[wsk_wygrane];
	if (kasa[wsk_kasa]==0) 
		{
		stop=1;
		break;
		}
	}
if (stop==1) printf("Wynik: %ld\n\n",licznik);
else
	{ //stop==0, a więc minął cały jeden cykl, ale jeszcze nie wiem, co się stanie...
	for (int i=1; i<=N; i++) if (kasa[i]<kasa_stan[i]) {stop=-1; break;}
	if (stop==0) printf("Wynik: %ld\n\n",-1);
	}

//for (int i=1; i<=N; i++) printf("kasa[%ld]=%ld\n",i,kasa[i]);
//for (int i=1; i<=m; i++) printf("wygrane[%ld]=%ld\n",i,wygrane[i]);


while (stop==-1)
	{
	wsk_wygrane++; wsk_kasa++; licznik++;
	if (wsk_wygrane>m) wsk_wygrane=1;
	if (wsk_kasa>N) wsk_kasa=1;
	kasa[wsk_kasa]+=wygrane[wsk_wygrane];
	if (kasa[wsk_kasa]==0) 
		{
		stop=2;
		break;
		}
	}


int WYNIK_BRUT=licznik;
if (stop==2) printf("Wynik: %ld\n\n",licznik);
*/
//for (int i=1; i<=N; i++) { kasa[i]=kasa_stan[i]; }


//for (int i=1; i<=N; i++) printf("kasa[%ld]=%ld\n",i,kasa[i]);
//for (int i=1; i<=m; i++) printf("wygrane[%ld]=%ld\n",i,wygrane[i]);

NWD_NWD=NWD(N,m);
NWD_N_m=NWD_NWD;
//Czyli mam NWD grup... Więc na razie robię obliczenia tylko dla tych kilku, bo
//  tylko, jeśli będzie ujemna różnica, to sprawdzę pozostałe z danej grupy.


for (int i=1; i<=N; i++) { roznica[i]=0; ujemne[i]=0; }

for (int i=1; i<=NWD_N_m; i++)
	{
	int pozycja=i;
	for (int j=1; j<=m/NWD_N_m; j++)
		{
//		printf("WTF? j=%ld, m=%ld, NWD_N_m=%ld\n",j,m,NWD_N_m);
		roznica[i]+=wygrane[pozycja];
//		printf("PRZED i=%ld, wygrane[pozycja]=%ld, pozycja=%ld\n",i,wygrane[pozycja],pozycja);
		if (wygrane[pozycja]<0) ujemne[i]--; 
		
		pozycja+=N;
		if (pozycja>m) pozycja=((pozycja-1)%m)+1;
		}
	}

//printf("\n");
//for (int i=1; i<=N; i++) printf("roznica[%ld]=%ld\n",i,roznica[i]);
//printf("\n");
//for (int i=1; i<=N; i++) printf("ujemne[%ld]=%ld\n",i,ujemne[i]);

int czy_od_razu=0;
int poz=0;
for (int i=1; i<=N; i++) 
	{
	poz++; 
	if (poz>NWD_N_m) poz=1;
	
	if ( kasa[i] - ujemne[poz]<=0) { czy_od_razu=1; break; }
	}

// Jeżeli czy_od_razu==1, to po prostu robię kolejne cykle (choć powinienem przerwać, jeśli po jednym cyklu nic się nie stanie, a wszystkie roznice są dodatnie);


long long licznik=0,CYKL;
CYKL = N*m/NWD_N_m;
int wsk_wygrane=0;
int wsk_kasa=0;
int stop=0;

if (czy_od_razu==1)
	{
	printf("TAK - czy_od_razu==1");
	for (long long i=1; i<=CYKL; i++)
		{
		wsk_wygrane++; wsk_kasa++; licznik++;
		if (wsk_wygrane>m) wsk_wygrane=1;
		if (wsk_kasa>N) wsk_kasa=1;
		kasa[wsk_kasa]+=wygrane[wsk_wygrane];
		if (kasa[wsk_kasa]==0)
			{
			stop=1;
			break;
			}
		}
	if (stop==1) { printf("%lld",licznik); return 0; }
	}

//Teraz sprawdzam, czy to w ogóle kiedyś nastąpi
for (int i=1; i<=m/NWD_N_m; i++) if (roznica[i]<0) stop=2;

if (stop==0) { printf("%ld",-1); return 0; }


// No to teraz sprawdzam, ile cykli mogę zrobić w głowie...
long long MAKS_CYKLI=10000000,propozycja_CYKLI;


//Muszę zatem sprawdzić, po ilu cyklach w danym polu (o ujemnej różnicy) kasa spadnie do poziomu "ujemne";
poz=0;
for (int i=1; i<=N; i++)
	{
	poz++; 
	if (poz>NWD_N_m) poz=1;
	
	if (roznica[poz]<0)
		{
		propozycja_CYKLI=(kasa[i] + ujemne[poz]) / (-roznica[poz]);
//		printf("kasa[%ld]=%ld,  ujemne[poz]=%ld,  roznica[poz]=%ld,  propozycja_CYKLI=%ld\n",i,kasa[i],ujemne[poz],roznica[poz],propozycja_CYKLI);
		if (propozycja_CYKLI<MAKS_CYKLI) MAKS_CYKLI=propozycja_CYKLI;
		}
	}
if (MAKS_CYKLI<0) MAKS_CYKLI=0;

//printf("Zostanie ominietych %ld cykli.\n",MAKS_CYKLI);

licznik+=CYKL*MAKS_CYKLI;
for (int i=1; i<=N; i++)
	{
	poz++; 
	if (poz>NWD_N_m) poz=1;
	
	kasa[i]+=roznica[poz]*MAKS_CYKLI;
	}

// No i wykańczam na piechotę:


wsk_wygrane=0;
wsk_kasa=0;
stop=-1;
while (stop==-1)
	{
	wsk_wygrane++; wsk_kasa++; licznik++;
	if (wsk_wygrane>m) wsk_wygrane=1;
	if (wsk_kasa>N) wsk_kasa=1;
	kasa[wsk_kasa]+=wygrane[wsk_wygrane];
	if (kasa[wsk_kasa]==0) 
		{
		stop=2;
		break;
		}
	}

printf("%lld",licznik);


return 0;
}


