Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #define int int64_t
- #define rng(i, a, b) for (int i = a; i < b; i++)
- #define rep(i, b) rng(i, 0, b)
- #define gnr(i, a, b) for (int i = b - 1; i >= a; i--)
- #define per(i, b) gnr(i, 0, b)
- #define all(x) begin(x), end(x)
- #define sz(x) int(size(x))
- #define pb push_back
- #define eb emplace_back
- #define lb lower_bound
- #define ub upper_bound
- #define f first
- #define s second
- using namespace std;
- using namespace __gnu_pbds;
- constexpr int MOD = 1e9 + 7; // 998244353
- struct Mint {
- int v;
- Mint() : v(0) {}
- Mint(int64_t _v) {
- v = (-MOD < _v && _v < MOD ? _v : _v % MOD);
- if (v < 0) {
- v += MOD;
- }
- };
- Mint operator+(Mint b) { return Mint(v + b.v); }
- Mint operator-(Mint b) { return Mint(v - b.v); }
- Mint operator*(Mint b) { return Mint(1ll * v * b.v); }
- Mint operator/(Mint b) { return Mint(1ll * v * b.inv().v); }
- Mint pow(int e) {
- Mint b = *this;
- Mint ret = 1;
- while (e != 0) {
- if (e & 1) {
- ret = ret * b;
- }
- b = b * b;
- e >>= 1;
- }
- return ret;
- }
- Mint inv() {
- return pow(MOD - 2);
- }
- };
- void solve() {
- int n, m, k;
- cin >> n >> m >> k;
- vector<pair<int, int>> words(n);
- for (auto &[f, s] : words) {
- cin >> f >> s;
- s--;
- }
- vector<Mint> dp(k + 1); // dp[i] = ways to form a prefix of i syllables
- dp[0] = 1;
- rep(i, k) {
- for (auto [len, _] : words) {
- if (i + len <= k) {
- dp[i + len] = dp[i + len] + dp[i];
- }
- }
- }
- vector<Mint> lines(n); // lines[i] = ways to form a line with end class i
- for (auto [len, cla] : words) {
- lines[cla] = lines[cla] + dp[k - len];
- }
- vector<int> cnt(26);
- rep(i, m) {
- char c;
- cin >> c;
- cnt[c - 'A']++;
- }
- Mint ans = 1;
- rep(i, 26) {
- if (cnt[i] > 0) {
- Mint cur = 0;
- rep(j, n) {
- cur = cur + lines[j].pow(cnt[i]);
- }
- ans = ans * cur;
- }
- }
- cout << ans.v << '\n';
- }
- int32_t main() {
- #ifndef LOCAL
- freopen("poetry.in", "r", stdin);
- freopen("poetry.out", "w", stdout);
- #endif
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- int tc = 1;
- // cin >> tc;
- while (tc--) {
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement