#include <cstdio>
#include <cstring>
#include <cassert>
#include <queue>
#include <algorithm>
using namespace std;

typedef pair<int,int> PII;
typedef pair<PII,int> TPL;
#define mp make_pair

const int mr[]={0,-1,1,0};
const int mc[]={1,0,0,-1};

char a[35][35];
bool v[35][35];
int dp[35][35],sum[9][35][35];
int hp[1024],at[1024],w[1025];

int main(){
    int n,m,p;
    while(scanf("%d%d%d",&n,&m,&p)==3){
        int sr=0,sc=0,tr=0,tc=0;
        for(int i=1;i<=n;i++){
            scanf("%s",a[i]+1);
            for(int j=1;j<=m;j++){
                if(a[i][j]=='s') a[sr=i][sc=j]='.';
                if(a[i][j]=='t') a[tr=i][tc=j]='.';
            }
        }
        for(int i=0;i<p;i++) scanf("%d",hp+i);
        for(int i=0;i<p;i++) scanf("%d",at+i);
        int obj=*max_element(hp,hp+p);
        queue<PII> q;
        memset(dp,63,sizeof(dp));
        dp[tr][tc]=1;
        memset(v,0,sizeof(v));
        for(q.push(mp(tr,tc));q.size();q.pop()){
            int r=q.front().first;
            int c=q.front().second;
            v[r][c]=false;
            for(int o=0;o<4;o++){
                int dr=r+mr[o];
                int dc=c+mc[o];
                if(!dr || !dc || dr>n || dc>m
                || a[dr][dc]=='x'
                || a[dr][dc]=='k') continue;
                int cost=dp[r][c]+(a[dr][dc]=='w')+1;
                if(cost<dp[dr][dc]){
                    dp[dr][dc]=cost;
                    if(!v[dr][dc]){
                        v[dr][dc]=true;
                        q.push(mp(dr,dc));
                    }
                }
            }
        }
        memset(v,0,sizeof(v));
        while(1){
            v[sr][sc]=true;
            if(sr==tr && sc==tc) break;
            for(int o=0;o<4;o++){
                int dr=sr+mr[o];
                int dc=sc+mc[o];
                if(!dr || !dc || dr>n || dc>m
                || a[dr][dc]=='x'
                || a[dr][dc]=='k') continue;
                int cost=dp[sr][sc]-(a[sr][sc]=='w')-1;
                if(cost==dp[dr][dc]){
                    sr=dr,sc=dc;
                    break;
                }
            }
        }
        memset(sum,0,sizeof(sum));
        for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]=='k'){
            for(int l=1;l<9;l++){
                sum[l][i][j]=sum[l-1][i][j];
                for(int x=0;x<l;x++){
                    int dr,dc;
                    dr=i+x,dc=j+l-x;
                    if(dr>=1 && dc>=1 && dr<=n && dc<=m && v[dr][dc])
                        sum[l][i][j]+=(a[dr][dc]=='w')+1;
                    dr=i+l-x,dc=j-x;
                    if(dr>=1 && dc>=1 && dr<=n && dc<=m && v[dr][dc])
                        sum[l][i][j]+=(a[dr][dc]=='w')+1;
                    dr=i-x,dc=j-l+x;
                    if(dr>=1 && dc>=1 && dr<=n && dc<=m && v[dr][dc])
                        sum[l][i][j]+=(a[dr][dc]=='w')+1;
                    dr=i-l+x,dc=j+x;
                    if(dr>=1 && dc>=1 && dr<=n && dc<=m && v[dr][dc])
                        sum[l][i][j]+=(a[dr][dc]=='w')+1;
                }
            }
            sum[0][i][j]=0;
            for(int o=0;o<4;o++){
                int dr=i,dc=j,now=0;
                while(1){
                    dr+=mr[o];
                    dc+=mc[o];
                    if(!dr || !dc || dr>n || dc>m
                    || a[dr][dc]=='x'
                    || a[dr][dc]=='k') break;
                    if(v[dr][dc]) now+=(a[dr][dc]=='w')+1;
                }
                sum[0][i][j]=max(sum[0][i][j],now);
            }
        }
        int R1,S1,T1,U1,V1,W1,L1;
        int R2,S2,T2,U2,V2,W2,L2,X2;
        scanf("%d%d%d%d%d%d%d",&R1,&S1,&T1,&U1,&V1,&W1,&L1);
        scanf("%d%d%d%d%d%d%d%d",&R2,&S2,&T2,&U2,&V2,&W2,&L2,&X2);
        memset(w,63,sizeof(w));
        w[0]=0;
        for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]=='k'){
            vector<PII> u;
            for(int x=0;x<L1;x++){
                int use=R1+U1*x;
                int dmg=T1+W1*x;
                int spd=S1+V1*x;
                u.push_back(mp(use,dmg*spd*sum[0][i][j]));
            }
            for(int x=0;x<L2;x++){
                int use=R2+U2*x;
                int dmg=T2+W2*x;
                int spd=S2+V2*x;
                u.push_back(mp(use,dmg*spd*sum[X2][i][j]));
            }
            for(int c=obj;~c;c--){
                for(size_t x=0;x<u.size();x++)
                    w[c]=min(w[c],w[max(c-u[x].second,0)]+u[x].first);
            }
        }
        if(w[obj]>1000000000) puts("Happy summer holiday!");
        else printf("%d\n",w[obj]);
    }
}
