#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
#include <unordered_map>
#include <functional>

using namespace std;

const int MOD = 998244353;

vector<vector<int> > gett(int k, vector<int> v) {
	vector<vector<int> > ans(v.size());

	vector<vector<int> > cur(1<<(k+1), vector<int>(1<<(1<<(k+1))));
	for (int i=0;i<(1<<k);++i) cur[i][0] = 1;
	auto tr = [&]() {
		vector<int> res(1<<(1<<(k+1)));
		// cerr << "i" << endl;
		for (auto &i: cur) for (int j=0;j<(int)res.size();++j) (res[j] += i[j]) %= MOD;
		// cerr << "o" << endl;
		// for (int i: res) cerr << i << " ";
		// cerr << endl;
		return res;
	};
	int l = k;
	while (true) {
		while (!v.empty() && v.back() == l) {
			ans[v.size() - 1] = tr();
			v.pop_back();
		}
		if (v.empty()) break;
		++l;
		vector<vector<int> > nxt(1<<(k+1), vector<int>(1<<(1<<(k+1))));
		for (int i=0;i<(1<<(k+1));++i) {
			for (int j=0;j<(int)cur[i].size();++j) {
				for (int t=0;t<2;++t) {
					int msk = (i & ((1<<k)-1)) * 2 + t;
					// cerr << msk << " " << (j | (1<<msk)) << " " << i << " " << j << endl;
					(nxt[msk][j | (1<<msk)]+=cur[i][j])%=MOD;
				}
			}
		}
		cur = move(nxt);
	}

	return ans;
}

void solve(int test_ind){
	int n, m, k;
	cin >> n >> m >> k;
	if (n > m) swap(n, m);
	string ws;
	cin >> ws;
	int w = stoi(ws, 0, 2);
	if (m == k) {
		cout << 1 << endl;
		return;
	}
	int ans = 0;
	vector<int> sw = {w, (1<<k) + w, 2*w, 2*w+1};
	vector<vector<int> > v = gett(k, {m, n});
	auto contains = [&](int msk) {
		for (int ww: sw) if (msk&(1<<ww)) {
			return true;
		}
		return false;
	};
	vector<bool> C(1<<(1<<(k+1)));
	for (int i=0;i<(int)C.size();++i) C[i] = contains(i);
	for (int msk=0;msk<(1<<(1<<(k+1)));++msk) {
		if (!C[msk]) continue;
		for (int i=msk;i>0;i=(i-1)&msk) {
			if (!C[i]) continue;
			if (n != k && !C[msk^i]) continue;
			if (n == k) {
				ans = (ans + v[0][i]) % MOD;
			} else {
				// msk ^ i in n
				// i in m
				// if (v[0][i] && v[1][msk^i]) {
				// 	cerr << msk << " " << i << " " << v[0][i] << " " << v[1][msk^i] << endl;
				// }
				ans = (ans + v[0][i] * 1ll * v[1][msk^i]) % MOD;
			}
		}
	}
	cout << ans << endl;
}

int main(){
	cin.tie(0);
	ios_base::sync_with_stdio(false);
	int t=1;
	//cin >> t;
	for(int i=0;i<t;i++){
		solve(i);
	}
	return 0;
}
