func_code_string: #include <bits/stdc++.h>   using namespace std;   set<int> se;   struct zzz {     int v, id;   } zz[1000005];   bool cmp(const zzz &i, const zzz &j) { return i.v > j.v; }   int N, M, K;   char S[1000005], T[1000005], s[1000005];   int z[1000005], p[2][1000005];   void w(int td) {     for (int i = 0; i < M; i++) s[i] = T[i];     s[M] =    ;     for (int i = 0; i < N; i++) s[M + 1 + i] = S[i];     int L = 0, R = 0, n = N + M + 1;     for (int i = 1; i < n; i++) {       if (i > R) {         L = R = i;         while (R < n && s[R - L] == s[R]) R++;         z[i] = R - L;         R--;       } else {         int k = i - L;         if (z[k] < R - i + 1)           z[i] = z[k];         else {           L = i;           while (R < n && s[R - L] == s[R]) R++;           z[i] = R - L;           R--;         }       }     }     for (int i = 0; i < N; i++) zz[i].v = z[M + 1 + i], zz[i].id = i;     sort(zz, zz + N, cmp);     int i = -1;     se.clear();     for (int x = M; x >= 0; x--) {       while (i + 1 < N && zz[i + 1].v >= x) {         i++;         se.insert(zz[i].id);       }       if (se.lower_bound(K - x) == se.end())         p[td][x] = 1000000000;       else         p[td][x] = *se.lower_bound(K - x);     }   }   int main() {     scanf( %d%d%d , &N, &M, &K);     scanf( %s%s , S, T);     w(0);     for (int i = 1; i <= N; i++)       if (z[M + i] == M) {         puts( Yes );         if (i + K + K - 1 <= N)           printf( %d %d , i, i + K);         else           printf( %d %d , N - K - K + 1, N - K + 1);         return 0;       }     reverse(S, S + N);     reverse(T, T + M);     w(1);     for (int i = 1; i < M; i++)       if (i <= K && M - i <= K && p[0][i] + i <= N - p[1][M - i] - (M - i)) {         puts( Yes );         printf( %d %d , p[0][i] + i - K + 1, N - p[1][M - i] - (M - i) + 1);         return 0;       }     puts( No );   }   