#include<bits/stdc++.h>
using namespace std;
using LL=long long;
#define rep(i,n) for(int i=0; i<n; i++)
#define rep1(i,n) for(int i=1; i<n; i++)
#define all(a) (a).begin(),(a).end();

using uLL=unsigned long long;
map<int,int>M;
set<uLL>S[700];
int n;
string s[1<<17];
LL dp[1<<17],mod=1e9+7;
uLL gethash(string a)
{
  uLL B=mod;
  uLL now=0;
  for(int i=0;i<a.size();i++)now=now*B+a[i];
  return now;
}
vector<uLL>h(1);
vector<uLL>make(1);
vector<int>le(1);

int main(){
  cin>>n;
  int sz=0;
  for(int i=0;i<n;i++)
  {
    cin>>s[i];
    int l=s[i].length();
    int id;
    if(M[l]==0)
    {
      id=M[l]=++sz;
      uLL now=1;
      uLL B=mod;
      for(int j=0;j<l;j++)now=now*B;
      make.push_back(now);
      h.push_back(0);
      le.push_back(l);
    }
    else id=M[l];
    S[id].insert(gethash(s[i]));
  }
  string t;cin>>t;
  dp[0]=1;
  for(int i=0;i<t.size();i++)
  {
    for(int j=1;j<=sz;j++)
    {
      h[j]=h[j]*(uLL)mod+t[i];
      if(i>=le[j])h[j]=h[j]-make[j]*t[i-le[j]];
      if(i>=le[j]-1&&S[j].find(h[j])!=S[j].end())
      {
        dp[i+1]=(dp[i+1]+dp[i+1-le[j]])%mod;
      }
    }
  }
  cout<<dp[t.size()]<<endl;
}

