#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 4000000000000000001 int main(){ int N,M,K; cin>>N>>M>>K; vector s(N); rep(i,N){ cin>>s[i]; s[i]--; } vector a(M),b(M); rep(i,M)cin>>a[i]; rep(i,M)cin>>b[i]; vector> is(M); rep(i,N){ is[s[i]].push_back(i); } vector dp(N+1,vector(K+1,0)); dp[0][0] = 1; mint ans = 0; rep(i,N){ int d; rep(j,is[s[i]].size()){ if(is[s[i]][j]==i){ d = j; break; } } rep(j,K+1){ { int x = j - a[s[i]]; if(x>=0){ dp[i+1][j] += dp[i][x]; if(d!=0){ dp[i+1][j] -= dp[is[s[i]][d-1]][x]; } } } { int x = j - b[s[i]]; if(x>=0){ dp[i+1][j] += dp[i][x]; if(d!=0){ dp[i+1][j] -= dp[is[s[i]][d-1]][x]; } } } } rep(j,K+1){ if(j==K)ans += dp[i+1][j]; dp[i+1][j] += dp[i][j]; } } cout<