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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.TreeSet;

public class haz {
	public static class Config {
		
	}
	
	public static class Visit {
		public Visit(int deep, int gain) {
			this.deep = deep;
			this.gain = gain;
		}
		int deep;
		int gain;
	}
	
    public static void main(String[] args) throws IOException{
    	BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer tokenizer;
    	
    	tokenizer = new StringTokenizer(reader.readLine());
    	int n = Integer.parseInt(tokenizer.nextToken());
    	
    	tokenizer = new StringTokenizer(reader.readLine());
    	long[] zakonczenia = new long[n];
    	int[] budzet = new int[n];
    	int[] rund = new int[n];
    	for(int i = 0; i < n; i++ ) {
    		budzet[i] = Integer.parseInt(tokenizer.nextToken());
    		zakonczenia[i] = Long.MAX_VALUE;
    		rund[i] = i+1;
    	}
    	
    	tokenizer = new StringTokenizer(reader.readLine());
    	int m = Integer.parseInt(tokenizer.nextToken());
    	
    	String lastLine = reader.readLine();
    	int[] wins = new int[m];
    	for(int i = 0; i < m; i++) {
    		wins[i] = lastLine.charAt(i) == 'W' ? 1 : -1;
    	}
    	
    	for(int gracz = 0; gracz < n; gracz++) {
    		int graczaStart = (gracz) % m;
    		int wizyta = graczaStart;
    		HashMap<Long, TreeSet<Integer>> niskiWrund = new HashMap<Long, TreeSet<Integer>>();
    		long najNizszy = 0;
    		long niski = 0;
    		int runda = 0;
    		while(wizyta != graczaStart || niskiWrund.isEmpty()) {
    			niski = niski + wins[wizyta];
    			najNizszy = Math.min(najNizszy, niski);
    			runda++;
    			
    			if(!niskiWrund.containsKey(niski)) {
    				niskiWrund.put(niski, new TreeSet<Integer>());
    			}
    			niskiWrund.get(niski).add(runda);
    			wizyta = (wizyta + n) % m;
    		}
    		
    		long ilePelnychRundMoge = -1;
    		if(budzet[gracz] + najNizszy <= 0) {
    			ilePelnychRundMoge = 0;
    		} else if(niski > 0) {
    			// continue;
    		} else {
    			//System.out.println(budzet[gracz] + " + " + najNizszy + ") / 0-   " + niski);
    			ilePelnychRundMoge = (budzet[gracz] + najNizszy) / (0-niski);
    			ilePelnychRundMoge += (budzet[gracz] + najNizszy) % (0-niski) > 0 ? 1 : 0;
    		}
    		
	    	long ileWOstatniej = budzet[gracz] + niski * ilePelnychRundMoge;
	    		
    		//System.out.println("g=" + gracz + " " + runda + " " + najNizszy + " m=" + ilePelnychRundMoge + " " + ileWOstatniej);
    		//System.out.println((ilePelnychRundMoge < 0 ? "nie ma co pisac" : niskiWrund.get(0-ileWOstatniej).first()));
    		
    		
    		//System.out.println(gracz + " p=" + ilePelnychRundMoge);
    		zakonczenia[gracz] = ilePelnychRundMoge < 0 ? Long.MAX_VALUE :
    			gracz+1 +
    			(ilePelnychRundMoge * runda + niskiWrund.get(0-ileWOstatniej).first() - 1) * (n);
    		// zakonczenia[gracz] = budzet[gracz] / niski;
    		//System.out.println(gracz + "     " + niski + "   runda=" + runda + "   z[]" + zakonczenia[gracz]);
		
    	}
    	
    	
    	
    	
    	long min = Long.MAX_VALUE;
    	for(int i = 0; i < n; i++ ) {
    		min = Math.min(min, zakonczenia[i]);
    	}
    	System.out.println((min < Long.MAX_VALUE ? min : -1));
    }
}