#include <iostream>
#include <cstdio>
#include <stack>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
//#include <unordered_map>
#define N 111
//#define lson x<<1
//#define rson x<<1|1
//#define mid ((lt[x].l+lt[x].r)/2)
#define ID(x, y) (pre[(x)-1]+(y-1))
#define CHECK(x, y) ((x)>0 && (x)<= 2 * n - 1 && (y)>0 && (y)<=(linelimit))
using namespace std;
typedef pair<long long,long long> PII;
const long long INF=0x3f3f3f3f;
void Open()
{
    #ifndef ONLINE_JUDGE
        freopen("D:/in.txt","r",stdin);
        //freopen("D:/my.txt","w",stdout);
    #endif // ONLINE_JUDGE
}

long long n, mod, m, l;
long long a[N][N], b[N][N], c[N][N], mat[N][N], pre[N];
void printfm(long long A[N][N],long long n,long long m)
{
    for(long long i=0;i<n;i++)
        for(long long j=0;j<m;j++)
        {
            printf("%I64d%c",A[i][j],(j==m-1)?'\n':' ');
        }
    printf("\n");
}
void mul(long long A[N][N],long long B[N][N],long long t[N][N],long long n,long long m,long long l)//A ???n*m????????????B???m*l?????????,t???????????????
{
    long long tmp[N][N];//???????????¢??????
    for(long long i=0;i<n;i++)
        for(long long j=0;j<l;j++){
            tmp[i][j]=0;
            for(long long k=0;k<m;k++)
                tmp[i][j]=(tmp[i][j]+A[i][k]*B[k][j]%mod)%mod;
        }
    for(long long i=0;i<n;i++)
        for(long long j=0;j<l;j++)
            t[i][j]=tmp[i][j];
}
void expo(long long p[N][N],long long e[N][N],long long k,long long n)//P???n*n????????????k?????????k?¬???????e???????????????
{
    if(k!=1){
        for(long long i = 0; i < n; ++i)
            for(long long j = 0; j < n; ++j)
                e[i][j] = (i == j);
        while(k)
        {
            if(k&1)
                mul(e,p,e,n,n,n);
            mul(p,p,p,n,n,n);
            k>>=1;
        }
    }else {
        for(long long i=0;i<n;i++)
            for(long long j=0;j<n;j++)
                e[i][j]=p[i][j];
    }
    //printfm(e,n,n);
}
void addOneP(long long idx, long long x, long long y, long long linelimit)
{
    if(CHECK(x, y)){
        b[ID(x, y)][idx] = 1;
    }
}
int main()
{
    //Open();
    long long cas = 1;
    while(~scanf("%lld%lld%lld", &n, &mod, &l) && (n || mod || l))
    {
        m = n;
        long long add = 1;
        long long num = 0;
        pre[0] = 0;
        for(long long i=1; i <= 2 * n -1; i++){
            pre[i] = m + pre[i-1];
            for(long long j=1;j<=m;j++)
                scanf("%lld", &mat[i][j]), a[0][num++] = mat[i][j]%mod;
            if(i == n) add = -1;
            m += add;
        }
        memset(b, 0, sizeof(b));
        m = n, add = 1;
        for(long long i=1; i <= 2 * n -1; i++){
            for(long long j=1;j<=m;j++)
            {
//                cout<<ID(i, j)<<endl;
                addOneP(ID(i, j), i, j, m);
                addOneP(ID(i, j), i, j - 1, m);
                addOneP(ID(i, j), i, j + 1, m);
                addOneP(ID(i, j), i - 1, j, m - add);
                addOneP(ID(i, j), i + 1, j, m + (i < n ? 1 : -1));
                if(i < n) addOneP(ID(i, j), i - 1, j - 1, m - 1), addOneP(ID(i, j), i + 1, j + 1, m + 1);
                if(i == n) addOneP(ID(i, j), i - 1, j - 1, m - 1), addOneP(ID(i, j), i + 1, j - 1, m - 1);
                if(i > n) addOneP(ID(i, j), i - 1, j + 1, m + 1), addOneP(ID(i, j), i + 1, j - 1, m - 1);
            }
            if(i == n) add = -1;
            m += add;
        }
        expo(b, c, l, num);
        mul(a, c, b, 1, num, num);
        long long ans = 0;
        for(long long i=0;i<num;i++)
            ans += b[0][i];
        printf("Case %lld: %lld\n", cas++, ans);
    }
    return 0;
}

Measured memory_bytes: 1460