已过样例,其他全WA
#include<bits/stdc++.h>
using namespace std;
const int N=5000+10,p=1e9+7;
int n,m,k,se,s[N],c[N],dp[N],le[N],f[26+10],ma[N];
long long ans=1;
int ksm(int di,int zi){
if(di==1||di==0) return di;
if(zi==0) return 0;
long long cnt=1,jia=di;
while(zi){
if(zi&1) cnt=cnt*jia%p;
zi>>=1,jia=jia*jia%p;
}
return cnt;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) scanf("%d%d",&s[i],&c[i]);
for(int i=1;i<=m;i++){
char c;
scanf("%*c%c",&c);
f[(int)c-'A'+1]++;
}
dp[0]=1;
for(int i=0;i<=k;i++)
for(int j=1;j<=n;j++)if(i+s[j]<=k){
if(i+s[j]==k) le[c[j]]=(le[c[j]]+dp[i+s[j]])%p;
dp[i+s[j]]=(dp[i+s[j]]+dp[i])%p;
}
for(int i=1;i<=26;i++)if(f[i]){
memset(ma,0,sizeof(ma));
int pf=0;
for(intj=1;j<=n;j++)if(le[c[j]]&&!ma[c[j]]){
pf=(pf+ksm(le[c[j]],f[i]))%p,ma[c[j]]=1;
}
ans=ans*pf%p;
}
printf("%d",ans);
return 0;
}