#include <bits/stdc++.h>
using namespace std;
using ll = long long;
 
long long readInt(long long l,long long r,char endd){
	long long x=0;
	int cnt=0;
	int fi=-1;
	bool is_neg=false;
	while(true){
		char g=getchar();
		if(g=='-'){
			assert(fi==-1);
			is_neg=true;
			continue;
		}
		if('0'<=g && g<='9'){
			x*=10;
			x+=g-'0';
			if(cnt==0){
				fi=g-'0';
			}
			cnt++;
			assert(fi!=0 || cnt==1);
			assert(fi!=0 || is_neg==false);
 
			assert(!(cnt>19 || ( cnt==19 && fi>1) ));
		} else if(g==endd){
			if(is_neg){
				x= -x;
			}
			assert(l<=x && x<=r);
			return x;
		} else {
			assert(false);
		}
	}
}
string readString(int l,int r,char endd){
	string ret="";
	int cnt=0;
	while(true){
		char g=getchar();
		assert(g!=-1);
		if(g==endd){
			break;
		}
		cnt++;
		ret+=g;
	}
	assert(l<=cnt && cnt<=r);
	return ret;
}
long long readIntSp(long long l,long long r){
	return readInt(l,r,' ');
}
long long readIntLn(long long l,long long r){
	return readInt(l,r,'\n');
}
string readStringLn(int l,int r){
	return readString(l,r,'\n');
}
string readStringSp(int l,int r){
	return readString(l,r,' ');
}

long long P10(int x){
  return x == 0 ? 1 : 10 * P10(x - 1);
}

template <typename T, typename R = long long> 
vector<T> readArr(int len, R l, R r){
  vector<T> a(len);
  for(int i = 0; i < len; i++){
    if(i + 1 < len){
      a[i] = readIntSp(l, r);
    } else {
      a[i] = readIntLn(l, r);
    }
  }
  return a;
}

int add(int a, int b, int mod){
  a += b;
  if(a >= mod) a -= mod;
  return a;
}

int mul(ll a, ll b, int mod){
  return (a * b) % mod;
}

int main(){
  int n = readIntSp(1, 2 * P10(3));
  int k = readIntSp(1, 2 * P10(3));
  int m = readIntSp(1, P10(9));
  int mod = readIntLn(1, P10(9));
  auto A = readArr<int>(n, 1, m);
  auto P = readArr<int>(n + k, 1, m);
  auto C = readArr<int>(n + k, -P10(9), P10(9));
  const ll inf = 1ll<<60;
  vector<ll> best(n + 1, -inf);
  best[0] = 0;
  vector<vector<ll>> t;
  t.push_back(best);
  for(int i = 0; i < n + k; i++){
    vector<ll> nbest(n + 1, -inf);
    auto pick = [&](int x, ll sum){
      if(nbest[x] < sum){
        nbest[x] = sum;
      }
    };
    for(int j = 0; j <= n; j++){
      pick(j, best[j] + C[i]);
      if(m > 1) {
        pick(j, best[j]);
      }
      if(j < n){
        if(P[i] == A[j]){
          pick(j + 1, best[j] + C[i]);
        } else {
          pick(j + 1, best[j]);
        }
      }
    }
    best = nbest;
    t.push_back(best);
  }
  vector<vector<int>> ways(n + k + 1, vector<int>(n + 1, 0));
  ways[n + k][n] = 1;
  for(int i = n + k; i > 0; i--){
    for(int j = 0; j <= n; j++){
      if(j < n && P[i - 1] == A[j]){
        int w = 1;
        if(t[i - 1][j] + C[i - 1] == t[i][j + 1]) {
          if(t[i - 1][j] == t[i][j]){
            ways[i - 1][j] = add(ways[i - 1][j], mul(ways[i][j], m - w, mod), mod);
          }
          if(t[i - 1][j] + C[i - 1] == t[i][j + 1]) {
            ways[i - 1][j] = add(ways[i - 1][j], ways[i][j + 1], mod);
          }
        } else {
          if(t[i - 1][j] == t[i][j]){
            ways[i - 1][j] = add(ways[i - 1][j], mul(ways[i][j], m - w, mod), mod);
          }
          if(t[i - 1][j] + C[i - 1] == t[i][j]) {
            ways[i - 1][j] = add(ways[i - 1][j], ways[i][j], mod);
          }
        }
      } else {
        if(j < n){
          int w = 2;
          if(t[i - 1][j] == t[i][j]){
            ways[i - 1][j] = add(ways[i - 1][j], mul(ways[i][j], m - w, mod), mod);
          }
          if(t[i - 1][j] + C[i - 1] == t[i][j]) {
            ways[i - 1][j] = add(ways[i - 1][j], ways[i][j], mod);
          }
          if(t[i - 1][j] == t[i][j + 1]) {
            ways[i - 1][j] = add(ways[i - 1][j], ways[i][j + 1], mod);
          }
        } else {
          int w = 1;
          if(t[i - 1][j] == t[i][j]){
            ways[i - 1][j] = add(ways[i - 1][j], mul(ways[i][j], m - w, mod), mod);
          }
          if(t[i - 1][j] + C[i - 1] == t[i][j]) {
            ways[i - 1][j] = add(ways[i - 1][j], ways[i][j], mod);
          }
        }
      }
    }
  }
  cout << best[n] << ' ' << ways[0][0] << '\n';
  return 0; 
}