func_code_string: #include <bits/stdc++.h>   using namespace std;   int S[2][500005 * 4], pre[500005], suf[500005];   long long hpr1[3][500005], hpr2[3][500005], hsf1[3][500005], hsf2[3][500005],       pww[3][500005];   int n, m, k;   long long pr[3] = {79, 103, 211};   bool flag;   char a[500005], b[500005];   vector<int> sss[500005], ppp[500005];   int get(int node, int bas, int son, int x, int y, int w) {     if (bas > y || son < x) return (w ? -1 : 1900000000);     if (bas >= x && son <= y) {       if (bas == son) {         if (S[w][node]) {           flag = true;           return bas;         }         return 1900000000;       }       if (w) {         if (S[w][node * 2 + 1])           return get(node * 2 + 1, ((bas + son) / 2) + 1, son, x, y, w);         else if (S[w][node * 2])           return get(node * 2, bas, ((bas + son) / 2), x, y, w);         else           return -1;       } else {         if (S[w][node * 2])           return get(node * 2, bas, ((bas + son) / 2), x, y, w);         else if (S[w][node * 2 + 1])           return get(node * 2 + 1, ((bas + son) / 2) + 1, son, x, y, w);         else           return 1900000000;       }     }     if (w) {       int res = get(node * 2 + 1, ((bas + son) / 2) + 1, son, x, y, w);       if (flag) return res;       return get(node * 2, bas, ((bas + son) / 2), x, y, w);     } else {       int res = get(node * 2, bas, ((bas + son) / 2), x, y, w);       if (flag) return res;       return get(node * 2 + 1, ((bas + son) / 2) + 1, son, x, y, w);     }   }   void up(int node, int bas, int son, int x, int val, int w) {     if (bas > x || son < x) return;     if (bas == x && son == x) {       S[w][node] = val;       return;     }     up(node * 2, bas, ((bas + son) / 2), x, val, w);     up(node * 2 + 1, ((bas + son) / 2) + 1, son, x, val, w);     S[w][node] = S[w][node * 2] + S[w][node * 2 + 1];   }   void build(int node, int bas, int son, int w) {     if (bas == son) {       S[w][node] = 1;       return;     }     build(node * 2, bas, ((bas + son) / 2), w);     build(node * 2 + 1, ((bas + son) / 2) + 1, son, w);     S[w][node] = S[w][node * 2] + S[w][node * 2 + 1];   }   pair<pair<long long, long long>, long long> suf2(int bas, int son) {     return {{hsf2[0][son] - hsf2[0][bas + 1] * pww[0][bas - son + 1],              hsf2[1][son] - hsf2[1][bas + 1] * pww[1][bas - son + 1]},             hsf2[2][son] - hsf2[2][bas + 1] * pww[2][bas - son + 1]};   }   pair<pair<long long, long long>, long long> suf1(int bas, int son) {     return {{hsf1[0][son] - hsf1[0][bas + 1] * pww[0][bas - son + 1],              hsf1[1][son] - hsf1[1][bas + 1] * pww[1][bas - son + 1]},             hsf1[2][son] - hsf1[2][bas + 1] * pww[2][bas - son + 1]};   }   pair<pair<long long, long long>, long long> pre2(int bas, int son) {     return {{hpr2[0][son] - hpr2[0][bas - 1] * pww[0][son - bas + 1],              hpr2[1][son] - hpr2[1][bas - 1] * pww[1][son - bas + 1]},             hpr2[2][son] - hpr2[2][bas - 1] * pww[2][son - bas + 1]};   }   pair<pair<long long, long long>, long long> pre1(int bas, int son) {     return {{hpr1[0][son] - hpr1[0][bas - 1] * pww[0][son - bas + 1],              hpr1[1][son] - hpr1[1][bas - 1] * pww[1][son - bas + 1]},             hpr1[2][son] - hpr1[2][bas - 1] * pww[2][son - bas + 1]};   }   void hashsuf() {     for (int i = n; i >= 1; i--) {       for (int j = 0; j < 3; j++) {         hsf1[j][i] = hsf1[j][i + 1] * pr[j] + a[i] -  a  + 1;       }     }     for (int i = m; i >= 1; i--) {       for (int j = 0; j < 3; j++) {         hsf2[j][i] = hsf2[j][i + 1] * pr[j] + b[i] -  a  + 1;       }     }   }   void hashpre() {     for (int i = 1; i <= n; i++) {       for (int j = 0; j < 3; j++) {         hpr1[j][i] = hpr1[j][i - 1] * pr[j] + a[i] -  a  + 1;       }     }     for (int i = 1; i <= m; i++) {       for (int j = 0; j < 3; j++) {         hpr2[j][i] = hpr2[j][i - 1] * pr[j] + b[i] -  a  + 1;       }     }   }   pair<int, int> getsuf(int from, int len) {     flag = false;     int pos = get(1, 1, n, from + len - 1, n - (k - len), 1);     int be = pos - len + 1;     int en = pos + (k - len);     if (be < from || en > n) return {1900000000, 1900000000};     return {be, en};   }   int main() {     scanf( %d %d %d , &n, &m, &k);     scanf( %s , a + 1);     scanf( %s , b + 1);     hashpre();     hashsuf();     pww[0][0] = pww[1][0] = pww[2][0] = 1;     for (int i = 1; i <= n; i++)       for (int j = 0; j < 3; j++) pww[j][i] = pww[j][i - 1] * pr[j];     for (int i = 1; i <= n; i++) {       int bas = 1, son = min(m, n - i + 1);       while (bas <= son) {         if (pre1(i, i + ((bas + son) / 2) - 1) == pre2(1, ((bas + son) / 2)))           bas = ((bas + son) / 2) + 1;         else           son = ((bas + son) / 2) - 1;       }       pre[i] = son;       ppp[son].push_back(i);       bas = 1, son = min(m, i);       while (bas <= son) {         if (suf1(i, i - ((bas + son) / 2) + 1) ==             suf2(m, m - ((bas + son) / 2) + 1))           bas = ((bas + son) / 2) + 1;         else           son = ((bas + son) / 2) - 1;       }       suf[i] = son;       sss[son].push_back(i);     }     for (int i = 1; i <= n; i++) {       if (pre[i] == m && m <= k) {         int mxen = min(n, i + k - 1);         int mnbe = max(1, i - k + 1);         if (mxen - 2 * k + 1 >= 1) {           printf( Yes n%d %d , mxen - 2 * k + 1, mxen - k + 1);           return 0;         }         if (mnbe + 2 * k - 1 <= n) {           printf( Yes n%d %d , mnbe, mnbe + k);           return 0;         }       }     }     build(1, 1, n, 0);     for (int i = 0; i <= min(k, m); i++) {       for (int j = 0; j < (int)sss[m - i].size(); j++)         up(1, 1, n, sss[m - i][j], 1, 1);       flag = false;       int pos = get(1, 1, n, k - i + 1, n, 0);       for (int j = 0; j < (int)ppp[i].size(); j++) up(1, 1, n, ppp[i][j], 0, 0);       if (m - i > k) continue;       int en = pos + i - 1;       int be = en - k + 1;       if (en > n || be < 1) continue;       pair<int, int> res = getsuf(en + 1, m - i);       if (res.first < en + 1 || res.second > n) continue;       printf( Yes n%d %d , be, res.first);       return 0;     }     printf( No );   }   