#include <bits/stdc++.h>
using namespace std;
struct vec {
  long long first, second;
  vec() {}
  vec(long long first, long long second) : first(first), second(second) {}
  vec operator+(const vec& T) const {
    return {first + T.first, second + T.second};
  }
  vec operator-(const vec& T) const {
    return {first - T.first, second - T.second};
  }
  vec operator*(const long long& T) const { return {first * T, second * T}; }
  long long dot(const vec& T) const {
    return first * T.first + second * T.second;
  }
  long long cross(const vec& T) const {
    return first * T.second - second * T.first;
  }
  long long len() { return first * first + second * second; }
  bool operator==(const vec& T) const {
    return first == T.first && second == T.second;
  }
};
bool CHcmp(vec u, vec v) {
  if (u.first != v.first) return u.first < v.first;
  return u.second < v.second;
}
vector<vec> convex_hull(vector<vec> p) {
  sort(p.begin(), p.end(), CHcmp);
  vector<vec> hull;
  for (int i = 0; i < p.size(); i++) {
    while (hull.size() > 1 && (hull.back() - hull[hull.size() - 2])
                                      .cross(p[i] - hull[hull.size() - 2]) <= 0)
      hull.pop_back();
    hull.push_back(p[i]);
  }
  int tmp = (int)hull.size();
  for (int i = p.size() - 2; i >= 0; i--) {
    while (hull.size() > tmp &&
           (hull.back() - hull[hull.size() - 2])
                   .cross(p[i] - hull[hull.size() - 2]) <= 0)
      hull.pop_back();
    hull.push_back(p[i]);
  }
  if (p.size() > 1) hull.pop_back();
  return hull;
}
int n, m, sz;
vector<vec> ina, inb, ha, hb;
vector<pair<long long, long long> > sa, sb;
long long val[200055], ps[200055];
bool solve(long long p1, long long p2, long long md) {
  long long tar = 0;
  for (int i = 0; i < sz; i++) {
    long long num = sb[i].first * p1 + sb[i].second * p2;
    num %= md;
    tar = (tar + num * (i + 1)) % md;
  }
  long long cur = 0;
  for (int i = 0; i < sz + sz; i++) {
    val[i] = sa[i].first * p1 + sa[i].second * p2;
    val[i] %= md;
    if (i < sz) cur = (cur + val[i] * (i + 1)) % md;
    if (i > 0)
      ps[i] = (ps[i - 1] + val[i]) % md;
    else
      ps[i] = val[i];
  }
  if (cur == tar) return true;
  for (int i = sz; i < sz + sz; i++) {
    cur -= ps[i - 1] - (i - 1 - sz >= 0 ? ps[i - 1 - sz] : 0);
    cur %= md;
    cur = (cur + md) % md;
    cur = (cur + val[i] * sz) % md;
    if (cur == tar) return true;
  }
  return false;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    long long first, second;
    scanf("%lld%lld", &first, &second);
    ina.push_back(vec(first, second));
  }
  for (int i = 0; i < m; i++) {
    long long first, second;
    scanf("%lld%lld", &first, &second);
    inb.push_back(vec(first, second));
  }
  ha = convex_hull(ina);
  hb = convex_hull(inb);
  if (ha.size() != hb.size()) {
    printf("no\n");
    return 0;
  }
  sz = ha.size();
  ha.push_back(ha[0]);
  ha.push_back(ha[1]);
  hb.push_back(hb[0]);
  hb.push_back(hb[1]);
  for (int i = 0; i < sz; i++) {
    long long len = (ha[i] - ha[i + 1]).len();
    long long ang = (ha[i] - ha[i + 1]).dot(ha[i] - ha[i + 2]);
    sa.push_back({len, ang});
  }
  for (int i = 0; i < sz; i++) {
    long long len = (hb[i] - hb[i + 1]).len();
    long long ang = (hb[i] - hb[i + 1]).dot(hb[i] - hb[i + 2]);
    sb.push_back({len, ang});
  }
  for (int i = 0; i < sz; i++) sa.push_back(sa[i]);
  if (solve(37, 97, 1610612741)) {
    printf("YES\n");
  } else {
    printf("NO\n");
  }
  return 0;
}
