```cpp
#include<iostream>
#include<cstring>
#include<cstdio>
#define int long long
using namespace std;
const int N=2210;
int tre[N][N];
int n,h,del;
inline int f_in(){
int f=0;char t=1,c=getchar();
while(c<'0' || c>'9'){if (c=='-') t=-1;c=getchar();}
while('0'<=c && c<='9'){f=f*10+c-'0';c=getchar();}
return f*t;
}
signed main(){
n=f_in(),h=f_in(),del=f_in();
for(int i=1;i<=n;i++){
int a=f_in();
for(int j=1;j<=a;j++){
int b=f_in();
if (b<=h && b>=0)//这个特判不加会WA,说明肯定有T(i,j)超过了H
tre[i][b]++;
}
}
int maxn[N+del+234];//为了防溢出,多开了一点
memset(maxn,0,sizeof(maxn));
int ans=0;
for(int i=h;i>=1;i--){
for(int j=1;j<=n;j++){
if (i+del>h) maxn[i+del]=0;
tre[j][i]+=max(tre[j][i+1],maxn[i+del]);
maxn[i]=max(maxn[i],tre[j][i]);
}
}
printf("%d",maxn[1]);
}
```
by jiangyanheng @ 2020-11-27 07:54:09
请无视上面的 b>=0,主要问题应该在上界
by jiangyanheng @ 2020-11-27 09:09:04
根据以下程序,#1 会输出 ``ORZ JIANGYE``,而 #2 的输出正常
```cpp
#include<iostream>
#include<cstring>
#include<cstdio>
#define int long long
using namespace std;
int n,h,del,a,b;
signed main(){
cin >> n >> h >> del;
for(int i=1;i<=n;i++){
cin >> a;
for(int j=1;j<=a;j++){
cin >> b;
if(b > h)
{
cout << "ORZ JIANGYE";
return 0;
}
}
}
cout << "QWQ\n";
return 0;
}
```
### ORZ JIANGYE!
by lxy__ @ 2020-11-27 09:18:45
@[jiangyanheng](/user/68884)
by lxy__ @ 2020-11-27 09:20:09