#include <bits/stdc++.h>
using namespace std;
const long long primes[1] = {1010102101};
int n, m, q;
char str[500010];
long long table[500010][1];
long long ls[500010][1], lt[500010][1];
int cf[500010], cb[500010];
pair<long long, long long> gcd(long long a, long long b) {
  if (b == 0) {
    return {1, 0};
  }
  auto ret = gcd(b, a % b);
  return {ret.second, ret.first - ret.second * (a / b)};
}
int su = 0;
void range(long long lis[][1], int l, int r, int base, long long ret[1]) {
  su += 1;
  if (l == 0) {
    for (int i = 0; i < 1; i++) {
      ret[i] = (lis[r][i] * table[base - l][i]) % primes[i];
    }
    return;
  }
  for (int i = 0; i < 1; i++) {
    ret[i] = ((lis[r][i] - lis[l - 1][i] + primes[i]) * table[base - l][i]) %
             primes[i];
  }
}
int lmatch(int pos) {
  int l = 1;
  int r = min(m, n - pos);
  int ans = 0;
  while (l <= r) {
    int mid = (l + r) / 2;
    long long reta[1], retb[1];
    int base = max(pos, 0);
    range(ls, pos, pos + mid - 1, base, reta);
    range(lt, 0, mid - 1, base, retb);
    bool flag = true;
    for (int i = 0; i < 1; i++) {
      if (reta[i] != retb[i]) {
        flag = false;
        break;
      }
    }
    if (flag) {
      ans = mid;
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  return ans;
}
int rmatch(int pos) {
  int l = 1;
  int r = min(m, pos + 1);
  int ans = 0;
  while (l <= r) {
    int mid = (l + r) / 2;
    long long reta[1], retb[1];
    int base = max(pos - mid + 1, m - mid);
    range(ls, pos - mid + 1, pos, base, reta);
    range(lt, m - mid, m - 1, base, retb);
    bool flag = true;
    for (int i = 0; i < 1; i++) {
      if (reta[i] != retb[i]) {
        flag = false;
        break;
      }
    }
    if (flag) {
      ans = mid;
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  return ans;
}
bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
  return a.second < b.second;
}
bool cmph(const pair<int, int> &a, const pair<int, int> &b) {
  return a.first > b.first;
}
bool cmpi(const pair<int, int> &a, const pair<int, int> &b) {
  return a.first < b.first;
}
int main() {
  scanf("%d %d %d", &n, &m, &q);
  for (int i = 0; i < 1; i++) {
    table[0][i] = 1;
  }
  for (int i = 1; i < n; i++) {
    for (int j = 0; j < 1; j++) {
      table[i][j] = (table[i - 1][j] * 26) % primes[j];
    }
  }
  scanf("%s", str);
  for (int i = 0; i < 1; i++) {
    ls[0][i] = str[0] - 'a';
  }
  for (int i = 1; i < n; i++) {
    for (int j = 0; j < 1; j++) {
      ls[i][j] = (ls[i - 1][j] + (str[i] - 'a') * table[i][j]) % primes[j];
    }
  }
  scanf("%s", str);
  for (int i = 0; i < 1; i++) {
    lt[0][i] = str[0] - 'a';
  }
  for (int i = 1; i < m; i++) {
    for (int j = 0; j < 1; j++) {
      lt[i][j] = (lt[i - 1][j] + (str[i] - 'a') * table[i][j]) % primes[j];
    }
  }
  vector<pair<int, int>> fl, bl;
  for (int i = 0; i < n; i++) {
    {
      int len = lmatch(i);
      fl.emplace_back(i, len);
    }
    {
      int len = rmatch(i);
      bl.emplace_back(i, len);
    }
  }
  sort(fl.begin(), fl.end(), cmp);
  sort(bl.begin(), bl.end(), cmp);
  vector<pair<int, int>> fh, bh;
  int lim = min(m, q);
  for (int i = lim; i > 0; i--) {
    while (fl.size() > 0 && fl.back().second >= i) {
      fh.push_back(fl.back());
      push_heap(fh.begin(), fh.end(), cmph);
      fl.pop_back();
    }
    while (bl.size() > 0 && bl.back().second >= i) {
      bh.push_back(bl.back());
      push_heap(bh.begin(), bh.end(), cmpi);
      bl.pop_back();
    }
    while (fh.size() > 0 && i < m) {
      auto cur = fh.front();
      if (cur.first + i - q >= 0) {
        break;
      }
      pop_heap(fh.begin(), fh.end(), cmph);
      fh.pop_back();
    }
    while (bh.size() > 0 && i < m) {
      auto cur = bh.front();
      if (cur.first - i + 1 <= (n - q)) {
        break;
      }
      pop_heap(bh.begin(), bh.end(), cmpi);
      bh.pop_back();
    }
    if (fh.size() == 0) {
      cf[i] = -1;
    } else {
      cf[i] = max(0, fh.front().first + i - q);
    }
    if (bh.size() == 0) {
      cb[i] = -1;
    } else {
      cb[i] = min(n - q, bh.front().first - i + 1);
    }
  }
  cf[0] = 0;
  cb[0] = n - q;
  for (int i = 0; i <= lim; i++) {
    int j = m - i;
    if (cf[i] == -1 || cb[j] == -1) {
      continue;
    }
    if (cf[i] + q <= cb[j]) {
      printf("Yes\n%d %d\n", cf[i] + 1, cb[j] + 1);
      return 0;
    }
  }
  printf("No\n");
  return 0;
}
