#include <bits/stdc++.h>
using namespace std;
const int N = 2001, MOD = 1e9 + 7;
int n, b, f[N], dp[N][N];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
if (fopen("GRAPH.INP", "r")) {
freopen("GRAPH.INP", "r", stdin);
freopen("GRAPH.OUT", "w", stdout);
}
cin >> n >> b;
for (int i = 1; i <= n; ++i) {
cin >> f[i];
}
for (int gz = 0; gz <= n; ++gz) {
dp[0][gz] = 1;
}
for (int i = 1; i <= n; ++i) {
for (int gz = 0; gz <= n - i; ++gz) {
if (f[i] != -1) {
// forced
if (f[i] < i && f[i] + gz <= b) {
dp[i][gz] = dp[i - 1][gz + (f[i] > 0)];
}
} else {
// choice
for (int j = 0; j < i; ++j) {
if (j + gz <= b) {
dp[i][gz] += dp[i - 1][gz + (j > 0)];
if (dp[i][gz] >= MOD) {
dp[i][gz] -= MOD;
}
}
}
}
}
}
cout << dp[n][0] << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBOID0gMjAwMSwgTU9EID0gMWU5ICsgNzsKCmludCBuLCBiLCBmW05dLCBkcFtOXVtOXTsKCmludCBtYWluKCkgewogIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICBjaW4udGllKDApOwoKICBpZiAoZm9wZW4oIkdSQVBILklOUCIsICJyIikpIHsKICAgIGZyZW9wZW4oIkdSQVBILklOUCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3BlbigiR1JBUEguT1VUIiwgInciLCBzdGRvdXQpOwogIH0KCiAgY2luID4+IG4gPj4gYjsKICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgIGNpbiA+PiBmW2ldOwogIH0KCiAgZm9yIChpbnQgZ3ogPSAwOyBneiA8PSBuOyArK2d6KSB7CiAgICBkcFswXVtnel0gPSAxOwogIH0KICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgIGZvciAoaW50IGd6ID0gMDsgZ3ogPD0gbiAtIGk7ICsrZ3opIHsKICAgICAgaWYgKGZbaV0gIT0gLTEpIHsKICAgICAgICAvLyBmb3JjZWQKICAgICAgICBpZiAoZltpXSA8IGkgJiYgZltpXSArIGd6IDw9IGIpIHsKICAgICAgICAgIGRwW2ldW2d6XSA9IGRwW2kgLSAxXVtneiArIChmW2ldID4gMCldOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBjaG9pY2UKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7ICsraikgewogICAgICAgICAgaWYgKGogKyBneiA8PSBiKSB7CiAgICAgICAgICAgIGRwW2ldW2d6XSArPSBkcFtpIC0gMV1bZ3ogKyAoaiA+IDApXTsKICAgICAgICAgICAgaWYgKGRwW2ldW2d6XSA+PSBNT0QpIHsKICAgICAgICAgICAgICBkcFtpXVtnel0gLT0gTU9EOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBjb3V0IDw8IGRwW25dWzBdIDw8ICdcbic7CiAgcmV0dXJuIDA7Cn0=