#include <bits/stdc++.h>
using namespace std;
//
const int mx = 1e5 + 5;
const int base = 331;
const int mod = 1e9 + 7;
const int mod1 = 1e9 + 2277;
const int mod2 = 1e9 + 5277;
//
int n;
int dp[mx] = {1};
vector<int> len;
unordered_set<int> S1[mx], S2[mx];
long long h1[mx], p1[mx] = {1};
long long h2[mx], p2[mx] = {1};
string T;
//
int hashing1 (void)
{
    long long hash_value = 0;
    //
    for (char c : T)
        hash_value = (hash_value * base + c) % mod1;
    return hash_value;
}
int hashing2 (void)
{
    long long hash_value = 0;
    //
    for (char c : T)
        hash_value = (hash_value * base + c) % mod2;
    return hash_value;
}
int get1 (int l, int r)
{
    return (h1[r] - h1[l] * p1[r - l] + 1LL * mod1 * mod1) % mod1;
}
int get2 (int l, int r)
{
    return (h2[r] - h2[l] * p2[r - l] + 1LL * mod2 * mod2) % mod2;
}
inline void add (int &a, int b)
{
    a += b;
    if (a >= mod)
        a -= mod;
}
//
void process (void)
{
    for (cin >> n; n--;)
    {
        cin >> T;
        S1[T.size()].insert(hashing1());
        S2[T.size()].insert(hashing2());
    }
    cin >> T;
    n = T.size();
    for (int i = 1; i <= n; ++i)
    {
        p1[i] = p1[i - 1] * base % mod1;
        h1[i] = (h1[i - 1] * base + T[i - 1]) % mod1;
        p2[i] = p2[i - 1] * base % mod2;
        h2[i] = (h2[i - 1] * base + T[i - 1]) % mod2;
    }

    for (int i = 1; i <= n; ++i)
        if (!S1[i].empty())
            len.emplace_back(i);
    for (int i = 1; i <= n; ++i)
        for (int j : len)
        {
            if (j > i)
                break;
            if (S1[j].find(get1(i - j, i)) != S1[j].end() &&
                S2[j].find(get2(i - j, i)) != S2[j].end())
                add(dp[i], dp[i - j]);
        }

    cout << dp[n];
}
//
signed main (void)
{
    ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    process();
}