#include<iostream>#include<istream>#include<sstream>#include<vector>#include<stack>#include<list>#include<map>#include<set>#include<deque>#include<queue>#include<cstring>#include<unordered_map>#include<unordered_set>#include<algorithm>#include<numeric>#include<chrono>#include<ctime>#include<cmath>#include<cctype>#include<string>#include<cstdio>#include<iomanip>#include<thread>#include<mutex>#include<condition_variable>#include<functional>#include<iterator>usingnamespace std;constint maxn =2e5+7;int cnt[maxn]={0}, nmax[maxn]={0}, sum[maxn]={0}, n, p;char a[maxn], b[maxn];boolok(longlongint mid){for(int i = mid; i <= n; i++){if(sum[i]<= nmax[i - mid])returntrue;}returnfalse;}intmain(){while(cin >> n >> p && n && p){
cin >> a >> b;for(int i =0; i < n; i++){
cnt[i +1]= cnt[i]+(a[i]!= b[i]);}for(int i =1; i <= n; i++) sum[i]=100* cnt[i]- p * i;for(int i =1; i <= n; i++) nmax[i]=max(nmax[i -1], sum[i]);int l =0, r = n;while(l < r){int mid =(l + r +1)>>1;if(ok(mid)){
l = mid;}else r = mid -1;}if(!l) cout <<"No solution."<< endl;else cout << l << endl;}return0;}