#include <bits/stdc++.h>
using namespace std;
template <class T>
T sqr(T x) {
  return x * x;
}
template <class T>
T distsqr(T x, T y, T a, T b) {
  return sqr(x - a) + sqr(y - b);
}
double cosine_angle(double a, double b, double c) {
  return (double)(sqr(a) + sqr(b) - sqr(c)) / ((double)2.0 * a * b);
}
template <class T>
T Maximum(T a, T b) {
  return a > b ? a : b;
}
template <class T>
T Minimum(T a, T b) {
  return a < b ? a : b;
}
template <class T>
T GCD(T a, T b) {
  if (!b) return a;
  return GCD(b, a % b);
}
template <class T>
void SWAP(T &a, T &b) {
  T temp = a;
  a = b;
  b = temp;
  return;
}
template <class T>
T BigMod(T a, T n, T mod) {
  if (!n) return (T)1 % mod;
  long long int power = BigMod(a, n >> 1, mod);
  power %= mod;
  power *= power;
  power %= mod;
  if (n & 1) power *= a % mod, power %= mod;
  return power;
}
template <class T>
T ExtendedEuclid(T a, T b, T c) {
  if (!a) return 0;
  return (b * ExtendedEuclid(b % a, a, -c) + c) / a;
}
template <class T>
T ModInverse(T a, T m) {
  return ((ExtendedEuclid(a, m, (T)GCD(a, m))) % (m) + (m)) % (m);
}
char str[3][100010];
int n;
int main() {
  int i, n, t, r, l[2], temp;
  scanf("%d %d", &n, &t);
  scanf("%s %s", str[0], str[1]);
  for (i = 0, r = n - t; i < n; i++) {
    if (r) {
      if (str[0][i] == str[1][i]) str[2][i] = str[0][i], r--;
    }
  }
  for (i = 0, l[0] = l[1] = r; i < n; i++) {
    if (!str[2][i]) {
      if (l[0] > 0 || l[1] > 0) {
        if (l[0] < l[1])
          str[2][i] = str[1][i], l[1]--;
        else {
          str[2][i] = str[0][i];
          l[0]--;
        }
      } else {
        temp = (str[1][i] - 'a' + 1) % 26 + 'a';
        if (temp != (int)str[0][i])
          str[2][i] = temp;
        else
          str[2][i] = ((str[1][i] - 'a' - 1) % (26) + (26)) % (26) + 'a';
      }
    }
  }
  if (!l[0] && !l[1])
    printf("%s\n", str[2]);
  else
    printf("%d", -1);
  return 0;
}
