#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e6+5;
const int inf = 1e9;
int a[N],b[N],p[30],L[N],R[N];
string ss,tt,s[N],t[N];
int calc(string str) {
int ans = 0;
for (int i = 0;i <= str.size()-1;i++)
if (str[i]=='1')ans |= (1 << i);
return ans;
}
int getone(int x) {
int cnt = 0;
while (x) {
if (x&1)cnt++;
x>>=1;
}
return cnt;
}
int main() {
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
cin >> ss >> tt;
s[0] = ss;
t[0] = tt;
for (int i = 1;i<= n;i++)
scanf("%d%d",&a[i],&b[i]),a[i]--,b[i]--;
for (int i = 0;i<= k;i++)p[i] = i;
for (int i = 0;i < (1<< k);i++)
L[i] = inf,R[i] = -inf;
for (int i = 1;i<= n;i++) {
s[i] = t[i] = string(k,'0');
swap(p[a[i]],p[b[i]]);
for (int j = 0;j < k;j++) {
s[i][p[j]] = ss[j];
t[i][p[j]] = tt[j];
}
}
for (int i = 0;i<= n;i++) {
L[calc(s[i])] = min(L[calc(s[i])],i);
R[calc(t[i])] = max(R[calc(t[i])],i);
}
for (int i = (1<<k)-1;i >= 0;i--)
for (int j = 0;j < k;j++)
if ((1<<j)&i) {
L[i^(1<<j)] = min(L[i^(1<<j)],L[i]);
R[i^(1<<j)] = max(R[i^(1<<j)],R[i]);
}
int ans = 0,l = 1,r = 1;
for (int i = 0;i < (1<<k);i++)
if (R[i]-L[i]>=m && getone(i)>ans) {
ans = getone(i);
l = L[i]+1,r = R[i];
}
printf("%d \n%d %d",k+2*ans-count(ss.begin(),ss.end(),'1')-count(tt.begin(),tt.end(),'1'),l,r);
return 0;
}