1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberInputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

public class haz {

	public static void main(String[] args) throws IOException {
		BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
		PrintWriter drukuj = new PrintWriter(new BufferedOutputStream(System.out));
		int liczbaKolegow = Integer.parseInt(bi.readLine());
		int [] pieniadze = new int [liczbaKolegow];
		int [] pieniadzeTest = new int [liczbaKolegow];
		StringTokenizer tokenizer = new StringTokenizer(bi.readLine());
		for (int i = 0; i<pieniadze.length; i++){
			int ilePieniedzy = Integer.parseInt(tokenizer.nextToken());
			pieniadze[i] = ilePieniedzy;
			pieniadzeTest[i] = ilePieniedzy;
		}
		int dlugoscCyklu = Integer.parseInt(bi.readLine());
		String cykl = bi.readLine().trim();
		int coJakiCzasCyklSiePowtarza = NWW(liczbaKolegow, dlugoscCyklu);
		int [] efektCyklu = new int [liczbaKolegow];
		int iPoPieniadzach = 0;
		int iPoCyklu = 0;
		int sumaKrokow = 0;
		for(int i = 0; i<coJakiCzasCyklSiePowtarza; i++){
			sumaKrokow++;
			if (iPoPieniadzach >= liczbaKolegow)
				iPoPieniadzach = 0;
			if (iPoCyklu >= dlugoscCyklu)
				iPoCyklu = 0;
			if (cykl.charAt(iPoCyklu) == 'W')
				pieniadzeTest[iPoPieniadzach]++;
			else{
				pieniadzeTest[iPoPieniadzach]--;
				if (pieniadze[iPoPieniadzach]<=0){
					drukuj.println(sumaKrokow);
					return;
				}
			}
			iPoCyklu++;
			iPoPieniadzach++;
		}
		for(int i = 0; i<coJakiCzasCyklSiePowtarza; i++){
			if (iPoPieniadzach >= liczbaKolegow)
				iPoPieniadzach = 0;
			if (iPoCyklu >= dlugoscCyklu)
				iPoCyklu = 0;
			if (cykl.charAt(iPoCyklu) == 'W')
				efektCyklu[iPoPieniadzach]++;
			else
				efektCyklu[iPoPieniadzach]--;
			iPoCyklu++;
			iPoPieniadzach++;
		}
		int poIluCyklach = Integer.MAX_VALUE;
		for (int i = 0; i<liczbaKolegow; i++){
			if (efektCyklu[i]<0){
				int mozePoIluCyklach = -1*pieniadze[i]/efektCyklu[i];
				poIluCyklach = Math.min(poIluCyklach, mozePoIluCyklach);
			}
		}
		if (poIluCyklach == Integer.MAX_VALUE)
			drukuj.println("-1");
		else{
			sumaKrokow = poIluCyklach*coJakiCzasCyklSiePowtarza;
			boolean czyDokonczyc = true;
			for (int i = 0; i<liczbaKolegow; i++){
				pieniadze[i] = pieniadze[i]+efektCyklu[i]*poIluCyklach;
				if (pieniadze[i] <= 0){
					sumaKrokow = sumaKrokow - (liczbaKolegow - 1 - i);
					czyDokonczyc = false;
					break;
				}
			}
			if (czyDokonczyc){
				iPoPieniadzach = 0;
				iPoCyklu = 0;
				for(int i = 0; i<coJakiCzasCyklSiePowtarza; i++){
					sumaKrokow++;
					if (iPoPieniadzach >= liczbaKolegow)
						iPoPieniadzach = 0;
					if (iPoCyklu >= dlugoscCyklu)
						iPoCyklu = 0;
					if (cykl.charAt(iPoCyklu) == 'W')
						pieniadze[iPoPieniadzach]++;
					else{
						pieniadze[iPoPieniadzach]--;
						if (pieniadze[iPoPieniadzach]<=0){
							break;
						}
					}
					iPoCyklu++;
					iPoPieniadzach++;
				}
			}
			drukuj.println(sumaKrokow);
		}
		drukuj.flush();
			
	}
	
	static public int NWW(int a, int b) {
		return (a*b)/NWDR(a, b);
	}
	
	static public int NWDR(int a, int b) {
		if (b != 0)
			return NWDR(b, a % b);
		return a;
	}
}