import java.io.*;
import java.math.BigInteger;
import java.util.*;
 
 
public class Main{
	public static final int mod = 1000003;
	public static int r,c,s,dx[] = {1,0,-1,0},dy[] = {0,1,0,-1};
	public static double a,b,ans;
	public static boolean ap[][];
	public static double visited[][][];
	public static void main(String[] args)throws IOException {
		// TODO Auto-generated method stub
		InputStream input = System.in;
	
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	
		Reader in = new Reader();
	
		int t = Integer.parseInt(br.readLine());
		
		for(int o=1; o<=t; o++)
		{
			StringTokenizer st = new StringTokenizer(br.readLine());
			
			 r = Integer.parseInt(st.nextToken());
			 c = Integer.parseInt(st.nextToken());
			int rs = Integer.parseInt(st.nextToken());
			int cs = Integer.parseInt(st.nextToken());
			 s = Integer.parseInt(st.nextToken());
			
			st = new StringTokenizer(br.readLine());
			
			 a = Double.parseDouble(st.nextToken());
			 b = Double.parseDouble(st.nextToken());
			
			 ap = new boolean[r][c];
			
			for(int i=0; i<r; i++)
			{
				st = new StringTokenizer(br.readLine());
				for(int j=0; j<c; j++)
					if(st.nextToken().equals("A"))
						ap[i][j] = true;
			}
			
			visited = new double[r][c][s+1];
			
			ans = -1;
			
				int tt[][] = new int[r][c];
				dfs(rs,cs,0,0,tt);
				
				
				
			
			System.out.println("Case #"+o+": "+ans);
		}
	}
	
	static void dfs(int x,int y,double p, int steps,int t[][])
	{	
		if(steps == s)
		{
			ans = Math.max(ans,p);
			return;
		}
		
		for(int i=0; i<4; i++)
		{
			int xx = x+dx[i];
			int yy = y+dy[i];
			
			if(xx<0 || xx >=r || yy<0 || yy>=c)
				continue;
			double pt = -1;
			
			if(t[xx][yy] != 0)
				pt = p + (ap[xx][yy]?a:b)*Math.pow(ap[xx][yy]?(1-a):(1-b),t[xx][yy]);
			else
				pt = p + (ap[xx][yy]?a:b);
			
			if(visited[xx][yy][steps+1] <= pt)
			{
				visited[xx][yy][steps+1] = pt;
				t[xx][yy]++;
				
				
				dfs(xx,yy,pt,steps+1,t);
				t[xx][yy]--;
			}
			
			
		}
		
		
		
		
	}
	
	
		
	
	 static class Reader
	    {
	        final private int BUFFER_SIZE = 1 << 16;
	        private DataInputStream din;
	        private byte[] buffer;
	        private int bufferPointer, bytesRead;
	 
	        public Reader()
	        {
	            din = new DataInputStream(System.in);
	            buffer = new byte[BUFFER_SIZE];
	            bufferPointer = bytesRead = 0;
	        }
	 
	        public Reader(String file_name) throws IOException
	        {
	            din = new DataInputStream(new FileInputStream(file_name));
	            buffer = new byte[BUFFER_SIZE];
	            bufferPointer = bytesRead = 0;
	        }
	 
	        public String readLine() throws IOException
	        {
	            byte[] buf = new byte[64]; // line length
	            int cnt = 0, c;
	            while ((c = read()) != -1)
	            {
	                if (c == '\n')
	                    break;
	                buf[cnt++] = (byte) c;
	            }
	            return new String(buf, 0, cnt);
	        }
	 
	        public int nextInt() throws IOException
	        {
	            int ret = 0;
	            byte c = read();
	            while (c <= ' ')
	                c = read();
	            boolean neg = (c == '-');
	            if (neg)
	                c = read();
	            do
	            {
	                ret = ret * 10 + c - '0';
	            }  while ((c = read()) >= '0' && c <= '9');
	 
	            if (neg)
	                return -ret;
	            return ret;
	        }
	 
	        public long nextLong() throws IOException
	        {
	            long ret = 0;
	            byte c = read();
	            while (c <= ' ')
	                c = read();
	            boolean neg = (c == '-');
	            if (neg)
	                c = read();
	            do {
	                ret = ret * 10 + c - '0';
	            }
	            while ((c = read()) >= '0' && c <= '9');
	            if (neg)
	                return -ret;
	            return ret;
	        }
	 
	        public double nextDouble() throws IOException
	        {
	            double ret = 0, div = 1;
	            byte c = read();
	            while (c <= ' ')
	                c = read();
	            boolean neg = (c == '-');
	            if (neg)
	                c = read();
	 
	            do {
	                ret = ret * 10 + c - '0';
	            }
	            while ((c = read()) >= '0' && c <= '9');
	 
	            if (c == '.')
	            {
	                while ((c = read()) >= '0' && c <= '9')
	                {
	                    ret += (c - '0') / (div *= 10);
	                }
	            }
	 
	            if (neg)
	                return -ret;
	            return ret;
	        }
	 
	        private void fillBuffer() throws IOException
	        {
	            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
	            if (bytesRead == -1)
	                buffer[0] = -1;
	        }
	 
	        private byte read() throws IOException
	        {
	            if (bufferPointer == bytesRead)
	                fillBuffer();
	            return buffer[bufferPointer++];
	        }
	 
	        public void close() throws IOException
	        {
	            if (din == null)
	                return;
	            din.close();
	        }
	    }	


}