#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const long long EPS = 0;
template <class T>
struct cplx {
  T x, y;
  cplx() {
    x = 0.0;
    y = 0.0;
  }
  cplx(T nx, T ny = 0) {
    x = nx;
    y = ny;
  }
  cplx operator+(const cplx& c) const { return {x + c.x, y + c.y}; }
  cplx operator-(const cplx& c) const { return {x - c.x, y - c.y}; }
  cplx operator*(const cplx& c) const {
    return {x * c.x - y * c.y, x * c.y + y * c.x};
  }
  cplx& operator*=(const cplx& c) {
    return *this = {x * c.x - y * c.y, x * c.y + y * c.x};
  }
  template <class U>
  cplx operator*(const U& c) const {
    return {x * c, y * c};
  }
  template <class U>
  cplx operator/(const U& c) const {
    return {x / c, y / c};
  }
};
long long cp(const cplx<long long>& a, const cplx<long long>& b) {
  return a.x * b.y - b.x * a.y;
}
long long dp(const cplx<long long>& a, const cplx<long long>& b) {
  return a.x * b.x + a.y * b.y;
}
inline long long abs(const cplx<long long>& a) { return a.x * a.x + a.y * a.y; }
inline bool eq(const cplx<long long>& a, const cplx<long long>& b) {
  return abs(a - b) <= EPS;
}
inline long long sgn(const long long& x) {
  return abs(x) <= EPS ? 0 : x / abs(x);
}
inline bool cmp_lex(const cplx<long long>& a, const cplx<long long>& b) {
  return a.x < b.x - EPS || (a.x <= b.x + EPS && a.y < b.y - EPS);
}
inline bool cmp_lex_i(const cplx<long long>& a, const cplx<long long>& b) {
  return a.y < b.y - EPS || (a.y <= b.y + EPS && a.x < b.x - EPS);
}
vector<cplx<long long>> chull(vector<cplx<long long>> p) {
  sort(p.begin(), p.end(), cmp_lex_i);
  int top = 0, bot = 1;
  vector<cplx<long long>> ch(2 * p.size());
  for (int i = 0, d = 1; i < p.size() && i >= 0; i += d) {
    while (top > bot && cp(ch[top - 1] - ch[top - 2], p[i] - ch[top - 2]) <= 0)
      top--;
    ch[top++] = p[i];
    if (i == p.size() - 1) d = -1, bot = top;
  }
  ch.resize(max(1, top - 1));
  return ch;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  vector<cplx<long long>> a(n), b(m);
  for (int i = 0; i < n; i++) {
    int x, y;
    cin >> x >> y;
    a[i] = cplx<long long>(x, y);
  }
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    b[i] = cplx<long long>(x, y);
  }
  a = chull(a);
  b = chull(b);
  if (a.size() != b.size()) {
    puts("NO");
    return 0;
  }
  n = a.size();
  vector<pair<long long, long long>> alol(n), blol(n);
  pair<long long, long long> best;
  int besti;
  for (int i = 0; i < n; i++) {
    alol[i] = {abs(a[(i + 1) % n] - a[i]),
               dp(a[(i + 2) % n] - a[(i + 1) % n], a[i] - a[(i + 1) % n])};
    if (best < alol[i]) {
      best = alol[i];
      besti = i;
    }
  }
  rotate(alol.begin(), alol.begin() + besti, alol.end());
  best = {0, 0};
  for (int i = 0; i < n; i++) {
    blol[i] = {abs(b[(i + 1) % n] - b[i]),
               dp(b[(i + 2) % n] - b[(i + 1) % n], b[i] - b[(i + 1) % n])};
    if (best < blol[i]) {
      best = blol[i];
      besti = i;
    }
  }
  rotate(blol.begin(), blol.begin() + besti, blol.end());
  puts(alol == blol ? "YES" : "NO");
  return 0;
}
