#include <iostream>
#include<vector>
#include<string>
//#pragma GCC optimize("O3")
#pragma GCC target("avx2,popcnt")
using namespace std;
#define int long long
const int mod = 998244353;
void solve(){
    int n,m,k;
    cin >> n >> m >> k;
    string w;
    cin>>w;
    vector<int> dp1(1ll<<(1ll<<(k+1)));
    for(int allowed = 0;allowed < (1ll<<(1ll<<(k+1))); ++allowed){
        vector<vector<int>>dp(n, vector<int>(1ll<<(k+1),0));
        for(int mask = 0; mask < (1ll<<(k+1)); ++mask){
            if((allowed>>mask)&1){
                dp[k][mask]=1;
            }
        }
        for(int i = k+1; i <n; ++i){
            for(int mask = 0; mask < (1ll<<(k+1)); ++mask){
                if((allowed>>mask)&1){
                    for(int aaa =0;aaa<2;++aaa){
                        dp[i][mask]  = (dp[i][mask] +dp[i-1][(1ll<<k)*aaa+(mask>>1)])%mod;
                    }
                }
            }
        }
        dp1[allowed] = 0;
        for(int mask = 0; mask <(1ll<<(k+1)); ++mask){
            dp1[allowed] = (dp1[allowed]+dp[n-1][mask])%mod;
        }
    }
    vector<int> strict1(1ll<<(1ll<<(k+1)));
    for(int allowed = 0; allowed< (1ll<<(1ll<<(k+1))); ++allowed){
        vector<int>ind;
        for(int i = 0; i < (1ll<<(k+1)); ++i){
            if((allowed>>i)&1) ind.push_back(i);
        }
        strict1[allowed] = 0;
        for(int mask= 0; mask < (1ll<<ind.size()); ++mask){

                int newmask = allowed;
                for(int i=0; i < ind.size(); ++i){
                    if((mask>>i)&1){
                        newmask -= (1ll<<ind[i]);
                    }
                }
                if(__builtin_popcount(mask) %2 == 0){
                    strict1[allowed] = (strict1[allowed] + dp1[newmask])%mod;
                }
                else {
                    strict1[allowed] = (strict1[allowed] +mod -dp1[newmask])%mod;
                }

        }
    }
    vector<int> dp2(1ll<<(1ll<<(k+1)));
    for(int allowed = 0;allowed < (1ll<<(1ll<<(k+1))); ++allowed){
        vector<vector<int>>dp(m, vector<int>(1ll<<(k+1),0));
        for(int mask = 0; mask < (1ll<<(k+1)); ++mask){
            if((allowed>>mask)&1){
                dp[k][mask]=1;
            }
        }
        for(int i = k+1; i <m; ++i){
            for(int mask = 0; mask < (1ll<<(k+1)); ++mask){
                if((allowed>>mask)&1){
                    for(int aaa =0;aaa<2;++aaa){
                        dp[i][mask]  = (dp[i][mask] +dp[i-1][(1ll<<k)*aaa+(mask>>1)])%mod;
                    }
                }
            }
        }
        dp2[allowed] = 0;
        for(int mask = 0; mask <(1ll<<(k+1)); ++mask){
            dp2[allowed] = (dp2[allowed]+dp[m-1][mask])%mod;
        }
    }
    

    int wmask = 0;
    for(int i = (int)w.size()-1; i >= 0; i--){
        wmask = 2*wmask + (w[i]-'0');
    }
    int ans = 0;
    for(int first = 0; first < (1ll<<(1ll<<(k+1)));++first){
        int second = ((1ll<<(1ll<<(k+1)))-1) ^ first;


        bool contain = false;
        if((first>>wmask)&1) contain = true;
        if((first>>(wmask+(1ll<<k)))&1) contain = true;
        if((first>>(wmask*2))&1) contain = true;
        if((first>>(wmask*2+1))&1) contain = true;
        if(!contain) continue;
        //int second = ((1ll<<(1ll<<(k+1)))-1) ^ first;
        int secondwithout = second;
        if((secondwithout>>wmask)&1){
            secondwithout -= (1ll<<wmask);
        }
        if((secondwithout>>(wmask+(1ll<<k)))&1){
            secondwithout -= (1ll<<(wmask+(1ll<<k)));
        }
        if((secondwithout>>(wmask*2))&1){
            secondwithout -= (1ll<<(wmask*2));
        }
        if((secondwithout>>(wmask*2+1))&1){
            secondwithout -= (1ll<<(wmask*2+1));
        }
        if(secondwithout == second){
            continue;
        }
        ans = (ans + strict1[first] * ((dp2[second]+mod-dp2[secondwithout])%mod))%mod;
       // cout << first <<' ' << ans << '\n';
    }
    cout << ans;
}

signed main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int t =1;
   // cin >> t;
    while(t--){
        solve();
    }
}
