原题:http://www.luogu.org/problem/show?pid=1373#
重要:当输入数据较大时,一定要用scanf!!!!!
注意: k++ 是重点
#include<iostream>
#include<cstdio>
using namespace std;
int dp[805][805][16][2];
int a[805][805];
const int mo=1e9+7;
int n,m,k,ans;
int main()
{
cin>>n>>m>>k;
k++;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
a[i][j]%=k;
dp[i][j][a[i][j]][0]=1;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
for (int p=0;p<k;p++)
{
int o=a[i][j];
int a1,a2,a3,a4;
a1=dp[i-1][j][(p-o+k)%k][1];
a2=dp[i][j-1][(p-o+k)%k][1];
a3=dp[i-1][j][(p+o+k)%k][0];
a4=dp[i][j-1][(p+o+k)%k][0];
dp[i][j][p][0]=(dp[i][j][p][0]+a1+a2)%mo;
dp[i][j][p][1]=(dp[i][j][p][1]+a3+a4)%mo;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
ans=(ans+dp[i][j][0][1])%mo;
}
cout<<ans;
}