#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pii pair<int,int>
#define int long long
const int N=100,mod=1e9+7;
int t,n,k;
string s;
char x[10]={'(',')','[',']','{','}'};
int pos[260];
string dp[N+2][N/2];
string add(string x,string y)
{
if (x.size()<y.size())
{
reverse(x.begin(),x.end());
while (x.size()<y.size()) x+="0";
reverse(x.begin(),x.end());
}
if (x.size()>y.size())
{
reverse(y.begin(),y.end());
while (x.size()>y.size()) y+="0";
reverse(y.begin(),y.end());
}
string c="";
int nho=0;
for (int i=x.size()-1;i>=0;i--)
{
int d=x[i]+y[i]+nho-96;
nho=d/10;d%=10;
c+=char(d+48);
}
if (nho>0) c+=char(nho+48);
reverse(c.begin(),c.end());
return c;
}
string cal(int i,int j)
{
if (dp[i][j]!="-1") return dp[i][j];
if (i==n)
{
string st="";
st+=char((j==0)+'0');
return st;
}
string &res=dp[i][j];
res="0";
if (j<k)
for (int p=1;p<=3;p++) res=add(res,cal(i+1,j+1));
if (j>0) res=add(res,cal(i+1,j-1));
return res;
}
void Sol2()
{
for (int i=0;i<=n;i++)
for (int j=0;j<=k;j++) dp[i][j]="-1";
vector<char> g;
string res="1";
int d=0;
for (int i=0;i<s.size();i++)
{
if (d<k)
{
for (int j=0;j<6;j+=2)
if (x[j]<s[i]) res=add(res,cal(i+1,d+1));
}
if (d>0)
if (x[pos[g.back()]+1]<s[i])
res=add(res,cal(i+1,d-1));
if (pos[s[i]]%2==0) g.push_back(s[i]),d++;
else g.pop_back(),d--;
}
cout<<res<<"\n";
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
if (fopen("BTN.inp","r"))
{
freopen("BTN.inp","r",stdin);
freopen("BTN.out","w",stdout);
}
pos['(']=0;pos[')']=1;
pos['[']=2;pos[']']=3;
pos['{']=4;pos['}']=5;
cin>>t>>n>>k;
cin>>s;
Sol2();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGludCBsb25nIGxvbmcgCmNvbnN0IGludCBOPTEwMCxtb2Q9MWU5Kzc7ICAKaW50IHQsbixrOwpzdHJpbmcgczsKY2hhciB4WzEwXT17JygnLCcpJywnWycsJ10nLCd7JywnfSd9OwppbnQgcG9zWzI2MF07CnN0cmluZyBkcFtOKzJdW04vMl07CnN0cmluZyBhZGQoc3RyaW5nIHgsc3RyaW5nIHkpCnsKICBpZiAoeC5zaXplKCk8eS5zaXplKCkpIAogIHsKICAgIHJldmVyc2UoeC5iZWdpbigpLHguZW5kKCkpOwogICAgd2hpbGUgKHguc2l6ZSgpPHkuc2l6ZSgpKSB4Kz0iMCI7CiAgICByZXZlcnNlKHguYmVnaW4oKSx4LmVuZCgpKTsKICB9CiAgaWYgKHguc2l6ZSgpPnkuc2l6ZSgpKSAKICB7CiAgICByZXZlcnNlKHkuYmVnaW4oKSx5LmVuZCgpKTsKICAgIHdoaWxlICh4LnNpemUoKT55LnNpemUoKSkgeSs9IjAiOwogICAgcmV2ZXJzZSh5LmJlZ2luKCkseS5lbmQoKSk7CiAgfQogIHN0cmluZyBjPSIiOwogIGludCBuaG89MDsKICBmb3IgKGludCBpPXguc2l6ZSgpLTE7aT49MDtpLS0pCiAgewogICAgaW50IGQ9eFtpXSt5W2ldK25oby05NjsKICAgIG5obz1kLzEwO2QlPTEwOwogICAgYys9Y2hhcihkKzQ4KTsKICB9CiAgaWYgKG5obz4wKSBjKz1jaGFyKG5obys0OCk7CiAgcmV2ZXJzZShjLmJlZ2luKCksYy5lbmQoKSk7CiAgcmV0dXJuIGM7Cn0Kc3RyaW5nIGNhbChpbnQgaSxpbnQgaikKewogIGlmIChkcFtpXVtqXSE9Ii0xIikgcmV0dXJuIGRwW2ldW2pdOwogIGlmIChpPT1uKSAKICB7CiAgICBzdHJpbmcgc3Q9IiI7CiAgICBzdCs9Y2hhcigoaj09MCkrJzAnKTsKICAgIHJldHVybiBzdDsKICB9CiAgc3RyaW5nICZyZXM9ZHBbaV1bal07CiAgcmVzPSIwIjsKICBpZiAoajxrKSAKICBmb3IgKGludCBwPTE7cDw9MztwKyspIHJlcz1hZGQocmVzLGNhbChpKzEsaisxKSk7CiAgaWYgKGo+MCkgcmVzPWFkZChyZXMsY2FsKGkrMSxqLTEpKTsKICByZXR1cm4gcmVzOwp9CnZvaWQgU29sMigpCnsKICBmb3IgKGludCBpPTA7aTw9bjtpKyspCiAgZm9yIChpbnQgaj0wO2o8PWs7aisrKSBkcFtpXVtqXT0iLTEiOwogIHZlY3RvcjxjaGFyPiBnOwogIHN0cmluZyByZXM9IjEiOwogIGludCBkPTA7CiAgZm9yIChpbnQgaT0wO2k8cy5zaXplKCk7aSsrKQogIHsKICAgIGlmIChkPGspCiAgICB7CiAgICAgIGZvciAoaW50IGo9MDtqPDY7ais9MikKICAgICAgaWYgKHhbal08c1tpXSkgcmVzPWFkZChyZXMsY2FsKGkrMSxkKzEpKTsKICAgIH0KICAgIGlmIChkPjApCiAgICBpZiAoeFtwb3NbZy5iYWNrKCldKzFdPHNbaV0pCiAgICByZXM9YWRkKHJlcyxjYWwoaSsxLGQtMSkpOwogICAgaWYgKHBvc1tzW2ldXSUyPT0wKSBnLnB1c2hfYmFjayhzW2ldKSxkKys7CiAgICBlbHNlIGcucG9wX2JhY2soKSxkLS07CiAgfQogIGNvdXQ8PHJlczw8IlxuIjsKfQpzaWduZWQgbWFpbigpIAp7CiAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICBjaW4udGllKDApO2NvdXQudGllKDApOwogIGlmIChmb3BlbigiQlROLmlucCIsInIiKSkKICB7CiAgICBmcmVvcGVuKCJCVE4uaW5wIiwiciIsc3RkaW4pOwogICAgZnJlb3BlbigiQlROLm91dCIsInciLHN0ZG91dCk7CiAgfQogIHBvc1snKCddPTA7cG9zWycpJ109MTsKICBwb3NbJ1snXT0yO3Bvc1snXSddPTM7CiAgcG9zWyd7J109NDtwb3NbJ30nXT01OwogIGNpbj4+dD4+bj4+azsKICBjaW4+PnM7CiAgU29sMigpOwp9Cg==