#include <bits/stdc++.h>
using namespace std;
int n, m;
long long g, s;
struct xx {
  int u, v;
  long long a, b;
} input[50004], sta[50004];
int fa[205];
bool cmp(xx a, xx b) {
  if (a.a == b.a) return a.b < b.b;
  return a.a < b.a;
}
void init() {
  for (int i = 0; i <= n; i++) fa[i] = i;
}
int Find(int x) { return x == fa[x] ? x : fa[x] = Find(fa[x]); }
int main() {
  long long ans = 0x3f3f3f3f3f3f3f3f;
  cin >> n >> m;
  cin >> g >> s;
  for (int i = 0; i < m; i++) {
    cin >> input[i].u >> input[i].v >> input[i].a >> input[i].b;
  }
  sort(input, input + m, cmp);
  int top = 0;
  for (int i = 0; i < m; i++) {
    init();
    sta[top++] = input[i];
    for (int j = top - 1; j > 0; j--)
      if (sta[j].b < sta[j - 1].b) swap(sta[j], sta[j - 1]);
    int cnt = 0;
    for (int j = 0; j < top; j++) {
      int fx = Find(sta[j].u);
      int fy = Find(sta[j].v);
      if (fx != fy) {
        sta[cnt++] = sta[j];
        fa[fx] = fy;
        if (cnt == n) break;
      }
    }
    top = cnt;
    if (cnt == n - 1) {
      ans = min(ans, input[i].a * g + sta[n - 2].b * s);
    }
  }
  if (ans == 0x3f3f3f3f3f3f3f3f)
    cout << "-1\n";
  else
    cout << ans << endl;
}
