func_code_string: #include <bits/stdc++.h>   using ll = long long;   const int N = 5e5 + 5;   using namespace std;   int n, m, k;   vector<int> build_kmp(string s, string t, bool check = false) {     vector<int> t_match(((int)t.size()) + 1, 0);     for (int i = (2); i <= (((int)t.size())); ++i) {       int c = t_match[i - 1];       while (c > 0 && t[c] != t[i - 1]) c = t_match[c];       if (t[c] == t[i - 1]) ++c;       t_match[i] = c;     }     vector<int> s_match(((int)s.size()) + 1, 0);     for (int i = (1); i <= (((int)s.size())); ++i) {       int c = s_match[i - 1];       while (c > 0 && t[c] != s[i - 1]) c = t_match[c];       if (t[c] == s[i - 1]) ++c;       if (c == m && check) {         int t = max(i, k);         if (n - t >= k && t - k + 1 <= i - m + 1) {           cout <<  Yes  << endl;           cout << t - k + 1 <<     << t + 1 << endl;           exit(0);         }         t = min(n - k, i - m);         if (t >= k && i <= t + k) {           cout <<  Yes  << endl;           cout << t - k + 1 <<     << t + 1 << endl;           exit(0);         }       }       s_match[i] = c;     }     vector<int> best(((int)t.size()) + 1, -1);     for (int i = (k); i <= (((int)s.size())); ++i) {       int c = s_match[i];       for (; best[c] == -1; c = t_match[c]) best[c] = i;     }     return best;   }   int main() {     string s, t;     cin >> n >> m >> k >> s >> t;     auto L = build_kmp(s, t, true);     reverse((s).begin(), (s).end());     reverse((t).begin(), (t).end());     auto R = build_kmp(s, t);     for (int i = (0); i <= (m); ++i)       if (R[i] != -1) R[i] = n - R[i] + 1;     for (int i = (0); i <= (m); ++i)       if (i <= k && m - i <= k && L[i] != -1 && R[m - i] != -1 &&           L[i] < R[m - i]) {         cout <<  Yes  << endl;         cout << L[i] - k + 1 <<     << R[m - i] << endl;         return 0;       }     cout <<  No  << endl;     return 0;   }   