func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, k, w;   char ax[500005];   char bx[500005];   int Next[500005], next2[500005];   int sig[500005][2];   int hh[500005][2];   bool tepan() {     int i, j, a, b;     for (i = 1; i <= n; i++) {       if (sig[i][0] == m) {         w = max(1, i - k + 1);         w = min(w, n - 2 * k + 1);         return 1;       }     }     return 0;   }   void kmp() {     int i, j = 0, a, b;     for (i = 2; i <= m; i++) {       while (j && bx[i] != bx[j + 1]) j = Next[j];       if (bx[i] == bx[j + 1]) j++;       Next[i] = j;     }     j = 0;     for (i = 1; i <= n; i++) {       while (j && ax[i] != bx[j + 1]) j = Next[j];       if (bx[j + 1] == ax[i]) j++;       sig[i][0] = j;     }     next2[m + 1] = m + 1;     next2[m] = m + 1;     j = m + 1;     for (i = m - 1; i; i--) {       while (j != m + 1 && bx[i] != bx[j - 1]) j = next2[j];       if (bx[i] == bx[j - 1]) j--;       next2[i] = j;     }     j = m + 1;     for (i = n; i; i--) {       while (j != m + 1 && ax[i] != bx[j - 1]) j = next2[j];       if (bx[j - 1] == ax[i]) j--;       sig[i][1] = j;     }   }   int main() {     scanf( %d%d%d , &n, &m, &k);     int i, j, a, b;     scanf( %s%s , ax + 1, bx + 1);     kmp();     if (k >= m && tepan()) {       printf( Yes n%d %d , w, n - k + 1);       return 0;     }     for (i = 1; i <= n - k + 1; i++) hh[sig[i][1]][1] = i;     for (i = n; i >= k; i--) hh[sig[i][0]][0] = i;     for (i = n; i; i--) {       if (hh[i][0]) hh[Next[i]][0] = min(hh[Next[i]][0], hh[i][0]);     }     for (i = 1; i <= n; i++)       if (hh[i][1]) hh[next2[i]][1] = max(hh[next2[i]][1], hh[i][1]);     int x;     if (k >= m)       x = m;     else       x = k + 1;     for (i = 1; i < x; i++) {       if (m - i > k) continue;       j = 1 + i;       if (hh[i][0] && hh[j][1] && hh[i][0] < hh[j][1]) {         printf( Yes n%d %d , hh[i][0] - k + 1, hh[j][1]);         return 0;       }     }     printf( No );     return 0;   }   