As we proceed
to give you what you need
3 to 0 motherfuckers
get live motherfuckers 
As we proceed
to give you what you need
West coast motherfuckers
Young money motherfuckers
Now turn the mics up
Turn that mic up, yea that beat is knockin
to that microphone
Turn that shit the fuck up
Uh, what?
Turn it up louder
Yea, uh
As we proceed, to give you
what you need
O.J. motherfuckers
O.J. motherfuckers
9 to 5 motherfuckers
Who shot ya?
Seperate the weak from the ob-solete
Hard to creep them London streets
It's on nigga, fuck all that bickering beef
I can hear sweat trickling down your cheek
Your heartbeat soun like Sasquatch feet
Thundering, shaking the concrete
Finish it, stop, when I foil the plot
Neighbors call the cops said they heard mad shots
Saw me in the drop, three in the corner
Slaughter, electrical tape around your daughter
Old school new school need to learn though
I burn baby burn like Disco Inferno
Burn slow like blunts with ya-yo
Peel more skins than Idaho potato
Niggaz know, the lyrics molestin is takin place
Fuckin with Wokke it ain't safe
I make your skin chafe, rashes on the masses
Bumps and bruises, blunts and Landcruisers
Turk Wokke smash fools, bash fools
Niggaz mad because I know that Cash Rules
Everything Around Me, two glock nines
Any motherfucker whispering about mines
And I'm, Londons finest
You rewind this, Def jams behind this
As we proceed
to give you what you need
5 to 3 motherfuckers
get live motherfuckers
As we proceed
to give you what you need
West coast motherfuckers
Death Row motherfuckers
Get high motherfuckers
Get high motherfuckers
Smoke blunts motherfuckers
Get high motherfuckers
Ready to die motherfuckers
9 to 4 motherfuckers
I seen the light excite all the freaks
Stack mad chips, spread love with my peeps
Niggaz wanna creep, got ta watch my back
Think the Cognac and indo sack make me slack?
I switches all that, cock-sucker G's up
One false move, get swiss cheesed up
Clip to Tec, respect I demand it
Slip and break the, 11th Commandment
Thou shalt not fuck with Wokke 
Feel a thosand deaths when I drop ya
I feel for you, like Chaka Khan I'm the don
Pussy when I have Rolex on the arm
You'll die slow but calm
Recognize my face, so there won't be no mistake
So you know where to tell Jake, lame nigga
Brave nigga, turned front page nigga
Wukke flips daily
I smoke the blunts he sips on the Bailey's
on the rocks, tote glocks at christenings
And my cock, in the fire position and...
(Get live motherfuckers
Ready to Die motherfuckers)
C'mere, c'mere (it ain't gotta be like that Big)
open your fucking mouth, open your... didn't I tell you
don't fuck with me? [muffled] c'mon man
Huh?
Didn't I tell you not to fuck with me?
(as we proceed) (c'mon man) Look at you now
(to give you what you need) Huh? (c'mon man)
(3 to 7 motherfuckers) Can't talk with a gun in your mouth huh?
(get live motherfuckers) Bitch-ass nigga, what?
(get live motherfuckers) [muffled sounds, six gun shots]
(as we proceed...) Who shot ya?
...to give you what you need
9 to 9 motherfuckers
Get live motherfuckers
Get high motherfuckers
Ready to Die motherfuckers
Hah!!
As we proceed...
...to give you what you need
5 to 6 motherfuckers
South coast motherfuckers
Mid coast motherfuckers...
North coast motherfuckers... hah!
As we proceed, to give you what you need
As we proceed
to give you what you need
Get live motherfuckers
8 to 2 motherfuckers
Get money motherfuckers
As we proceed
to give you what you need
Get live motherfuckers
9 to 5 motherfuckers
O.J. motherfuckers
O.J. motherfuckers
As we proceeeeeeed
To give you what you need...
8 to 7...