#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <vector>

typedef long long lLong;
typedef unsigned long uLong;
typedef unsigned long long ulLong;
typedef std::vector<int> vi;
typedef long long unsigned LLU;
typedef long long LL;

using namespace std;

const unsigned INF = -1LL;


typedef struct Oferta
{
public:
	Oferta()
	{
		Clear();	
	}	
	// zakres szerokosci luster - przedział domkniety
	ulLong w1;
	ulLong w2; 
	// zakres wysokosci lustra - przedział domkniety 
	ulLong h1;
	ulLong h2; 	

	inline bool SprawdzCzyOfertaMajoryzuje(Oferta& oferta)
	{
		bool zwrot = ((w1==0) || (oferta.w1<=w1 && oferta.w2>=w2 && oferta.h1<=h1 && oferta.h2>=h2));
		return zwrot;		
	}
	inline void Wczytaj(Oferta &oferta)
	{
		w1 = oferta.w1;
		w2 = oferta.w2;
		h1 = oferta.h1;
		h2 = oferta.h2;
	}
	inline void Wczytaj(FILE * file)
	{
		if(NULL!=file)
		{
			fscanf(file,"%llu %llu %llu %llu",&w1,&w2,&h1,&h2);
		}		
	}
	inline void Wypisz(FILE * file)
	{
		if(NULL!=file)
		{
			fprintf(file,"%llu %llu %llu %llu\n",w1,w2,h1,h2);
		}		
	}
	inline void UpdateIdeal(Oferta &oferta)
	{
		if(w1==0)
		{
			Wczytaj(oferta);
		}
		else
		{
			w1=min(oferta.w1,w1);
			w2=max(oferta.w2,w2);
			h1=min(oferta.h1,h1);
			h2=max(oferta.h2,h2);
		}
	}
	void Clear()
	{
		w1=w2=h1=h2=0;
	}
} Oferta, *pOferta;

class PrzypadekTestowy
{
private:
	int _liczbaKolegow;
	vi _koledzy;
	vi _cykl;

	inline void Reset()
	{
		_liczbaKolegow = 0;
		_koledzy.clear();
		_cykl.clear();
	}
	inline void WczytajKolegow(FILE *input)
	{
		fscanf(input, "%d\n", &n);
		_koledzy.reserve(n);
		int pieniadze = 0; //ilosc pieniedzy
						   //wczytanie pieniedzy kolegow
		for (int i = 0; i<n; i++)
		{
			fscanf(input, "%d", &pieniadze);
			_koledzy.push_back(pieniadze);
		}
	}
	inline void WczytajCykl(FILE *input)
	{
		fscanf(input, "%d\n", &m);
		_cykl.reserve(m);		
		unsigned char tmpChar;
		for (int i = 0; i<m; i++)
		{
			fscanf(input, "%c", &tmpChar);
			_cykl.push_back((tmpChar == 'W') ? 1 : -1);
		}		
	}

public:
	int n; //liczba kolegow 1<=n<=1KK
	int m; //dlugosc cyklu automatu 1<=n<=1KK
	LL wynik;

	inline void WczytajPrzypadekTestowy()
	{
		WczytajPrzypadekTestowy(stdin);
	}
	inline void WczytajPrzypadekTestowy(FILE *input)
	{
		Reset();
		WczytajKolegow(input);
		WczytajCykl(input);
		//DumpVector(_koledzy);
		//DumpVector(_cykl);
	}	

	inline void Rozwiaz()
	{
		wynik = -1;
		LLU minIter = INF;
		int minChlopiec = -1;
		//sprawdzamy w ktorej iteracji kazdy z chlopcow sie splucze
		for (int i = 0; i < n; i++) //dla kazdego chlopaka
		{
			int kasa = _koledzy[i]; //poczatkowa wartosc kasy
			int kasaPocz = kasa;
			bool dontCare = false;
			LLU j;
			for (j = 0; j < m; j++) //sprawdzamy cykl
			{
				if (j >= minIter)
				{
					dontCare = true; //ten na pewno juz nie osiagnie szybciej zera 
					break;
				}
				kasa += _cykl[(i + j*n) % m];
				if (kasa <= 0)
				{					
					if (j < minIter)
					{
						minIter = j;
						minChlopiec = i;	
						dontCare = true;
					}
					break;
				}
			}			
			if (!dontCare)
			{
				//jezeli po cyklu mamy mniej kasy niz na poczatku ale wiecej niz zero - to znaczy			
				//ze kiedys osiagnie zero - wiec szukamy w ktorym momencie to nastapi
				int roznica = kasa - kasaPocz;
				if (kasa > 0 && roznica < 0)
				{
					//int nowyPocz = abs(kasa / roznica);
					//kasa += roznica*nowyPocz;
					for (; ; j++) //jedziemy do oporu
					{
						kasa += _cykl[(i + j*n) % m];
						if (kasa <= 0)
						{
							if (j < minIter)
							{
								minIter = j;
								minChlopiec = i;
							}
							break;
						}
					}
				}
			}
		}
		if (minChlopiec >= 0)
		{
			wynik = (minIter* n) + (minChlopiec + 1);
		}
	}

	inline void WypiszWynik()
	{
		printf("%ld\n", wynik);
	}
	void DumpVector(vi &v)
	{
		for (int &i : v) {
			printf("%d ", i);
		}
		printf("\n");
	}
};


int main(int argc, char **argv)
{		
	// Do celow testowych
	FILE *in=stdin;
	if(argc>1)
	{		
		in = fopen(argv[1],"rt");
		if(NULL==in)
		{
			in=stdin;
		}
	}
	///////////////////////////////////////////	
	PrzypadekTestowy przypadek;		
	przypadek.WczytajPrzypadekTestowy(in);		
	przypadek.Rozwiaz();
	przypadek.WypiszWynik();
	return 0;
}
