#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
using namespace std;
const int maxn = 3e3;
const int maxk = maxn >> 1;
const int MOD = 1e9 + 7;
int t, n, k, level = 0;
string s;
ll dp[maxn + 10][maxk + 10], ans = 1;
vector<char> stk;
void add(ll &a, ll b)
{
a += b;
if (a >= MOD)
a -= MOD;
}
bool is_open(char c)
{
return c == '(' || c == '[' || c == '{';
}
int trans(char c)
{
if (t == 1 && c != ')')
return 0;
if (c == '(')
return 0;
if (c == '[' || c == ')')
return 1;
if (c == '{' || c == ']')
return 2;
return 3;
}
char inver(char c)
{
if (c == '(')
return ')';
if (c == '[')
return ']';
return '}';
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("BIEUTHUCNGOAC.INP", "r"))
{
freopen("BIEUTHUCNGOAC.INP", "r", stdin);
freopen("BIEUTHUCNGOAC.OUT", "w", stdout);
}
cin >> t >> n >> k >> s;
s = ' ' + s;
dp[0][0] = 1;
for (int i = 0; i < n; i++)
for (int j = 0; j <= k; j++)
{
if (j < k)
add(dp[i + 1][j + 1], dp[i][j]);
if (j)
{
add(dp[i + 1][j - 1], dp[i][j]);
if (t == 2)
{
add(dp[i + 1][j - 1], dp[i][j]);
add(dp[i + 1][j - 1], dp[i][j]);
}
}
}
// for (int i = 1; i <= n; i++)
// {
// for (int j = 0; j <= k; j++)
// cout << dp[i][j] << ' ';
// el;
// }
for (int i = 1; i <= n; i++)
{
if (is_open(s[i]))
{
level++;
add(ans, trans(s[i]) * dp[n - i][level] % MOD);
if (stk.size() && s[i] > inver(stk.back()) && level >= 2)
add(ans, dp[n - i][level - 2]);
stk.push_back(s[i]);
}
else
{
if (level < k)
add(ans, trans(s[i]) * dp[n - i][level + 1] % MOD);
level--;
stk.pop_back();
}
}
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBtYXhuID0gM2UzOwpjb25zdCBpbnQgbWF4ayA9IG1heG4gPj4gMTsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CgppbnQgdCwgbiwgaywgbGV2ZWwgPSAwOwpzdHJpbmcgczsKbGwgZHBbbWF4biArIDEwXVttYXhrICsgMTBdLCBhbnMgPSAxOwp2ZWN0b3I8Y2hhcj4gc3RrOwoKdm9pZCBhZGQobGwgJmEsIGxsIGIpCnsKICAgIGEgKz0gYjsKICAgIGlmIChhID49IE1PRCkKICAgICAgICBhIC09IE1PRDsKfQpib29sIGlzX29wZW4oY2hhciBjKQp7CiAgICByZXR1cm4gYyA9PSAnKCcgfHwgYyA9PSAnWycgfHwgYyA9PSAneyc7Cn0KaW50IHRyYW5zKGNoYXIgYykKewogICAgaWYgKHQgPT0gMSAmJiBjICE9ICcpJykKICAgICAgICByZXR1cm4gMDsKICAgIGlmIChjID09ICcoJykKICAgICAgICByZXR1cm4gMDsKICAgIGlmIChjID09ICdbJyB8fCBjID09ICcpJykKICAgICAgICByZXR1cm4gMTsKICAgIGlmIChjID09ICd7JyB8fCBjID09ICddJykKICAgICAgICByZXR1cm4gMjsKICAgIHJldHVybiAzOwp9CmNoYXIgaW52ZXIoY2hhciBjKQp7CiAgICBpZiAoYyA9PSAnKCcpCiAgICAgICAgcmV0dXJuICcpJzsKICAgIGlmIChjID09ICdbJykKICAgICAgICByZXR1cm4gJ10nOwogICAgcmV0dXJuICd9JzsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbigiQklFVVRIVUNOR09BQy5JTlAiLCAiciIpKQogICAgewogICAgICAgIGZyZW9wZW4oIkJJRVVUSFVDTkdPQUMuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiQklFVVRIVUNOR09BQy5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IHQgPj4gbiA+PiBrID4+IHM7CiAgICBzID0gJyAnICsgczsKICAgIGRwWzBdWzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IGs7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChqIDwgaykKICAgICAgICAgICAgICAgIGFkZChkcFtpICsgMV1baiArIDFdLCBkcFtpXVtqXSk7CiAgICAgICAgICAgIGlmIChqKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhZGQoZHBbaSArIDFdW2ogLSAxXSwgZHBbaV1bal0pOwogICAgICAgICAgICAgICAgaWYgKHQgPT0gMikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBhZGQoZHBbaSArIDFdW2ogLSAxXSwgZHBbaV1bal0pOwogICAgICAgICAgICAgICAgICAgIGFkZChkcFtpICsgMV1baiAtIDFdLCBkcFtpXVtqXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9Ci8vICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKLy8gICAgewovLyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gazsgaisrKQovLyAgICAgICAgICAgIGNvdXQgPDwgZHBbaV1bal0gPDwgJyAnOwovLyAgICAgICAgZWw7Ci8vICAgIH0KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBpZiAoaXNfb3BlbihzW2ldKSkKICAgICAgICB7CiAgICAgICAgICAgIGxldmVsKys7CiAgICAgICAgICAgIGFkZChhbnMsIHRyYW5zKHNbaV0pICogZHBbbiAtIGldW2xldmVsXSAlIE1PRCk7CiAgICAgICAgICAgIGlmIChzdGsuc2l6ZSgpICYmIHNbaV0gPiBpbnZlcihzdGsuYmFjaygpKSAmJiBsZXZlbCA+PSAyKQogICAgICAgICAgICAgICAgYWRkKGFucywgZHBbbiAtIGldW2xldmVsIC0gMl0pOwogICAgICAgICAgICBzdGsucHVzaF9iYWNrKHNbaV0pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpZiAobGV2ZWwgPCBrKQogICAgICAgICAgICAgICAgYWRkKGFucywgdHJhbnMoc1tpXSkgKiBkcFtuIC0gaV1bbGV2ZWwgKyAxXSAlIE1PRCk7CiAgICAgICAgICAgIGxldmVsLS07CiAgICAgICAgICAgIHN0ay5wb3BfYmFjaygpOwogICAgICAgIH0KCiAgICB9CgogICAgY291dCA8PCBhbnM7Cn0KCg==